!
    function(e, t) {
        "object" == typeof module && "object" == typeof module.exports ? module.exports = e.document ? t(e, !0) : function(e) {
            if (!e.document) throw new Error("jQuery requires a window with a document");
            return t(e)
        } : t(e)
    }("undefined" != typeof window ? window : this, function(p, e) {
        function s(e) {
            var t = "length" in e && e.length,
                n = K.type(e);
            return "function" !== n && !K.isWindow(e) && (!(1 !== e.nodeType || !t) || ("array" === n || 0 === t || "number" == typeof t && 0 < t && t - 1 in e))
        }
        function t(e, n, i) {
            if (K.isFunction(n)) return K.grep(e, function(e, t) {
                return !!n.call(e, t, e) !== i
            });
            if (n.nodeType) return K.grep(e, function(e) {
                return e === n !== i
            });
            if ("string" == typeof n) {
                if (se.test(n)) return K.filter(n, e, i);
                n = K.filter(n, e)
            }
            return K.grep(e, function(e) {
                return 0 <= U.call(n, e) !== i
            })
        }
        function n(e, t) {
            for (;
                (e = e[t]) && 1 !== e.nodeType;);
            return e
        }
        function f(e) {
            var n = pe[e] = {};
            return K.each(e.match(he) || [], function(e, t) {
                n[t] = !0
            }), n
        }
        function i() {
            Z.removeEventListener("DOMContentLoaded", i, !1), p.removeEventListener("load", i, !1), K.ready()
        }
        function o() {
            Object.defineProperty(this.cache = {}, 0, {
                get: function() {
                    return {}
                }
            }), this.expando = K.expando + o.uid++
        }
        function l(e, t, n) {
            var i;
            if (n === undefined && 1 === e.nodeType) if (i = "data-" + t.replace(ye, "-$1").toLowerCase(), "string" == typeof(n = e.getAttribute(i))) {
                try {
                    n = "true" === n || "false" !== n && ("null" === n ? null : +n + "" === n ? +n : ve.test(n) ? K.parseJSON(n) : n)
                } catch (o) {}
                ge.set(e, t, n)
            } else n = undefined;
            return n
        }
        function r() {
            return !0
        }
        function c() {
            return !1
        }
        function a() {
            try {
                return Z.activeElement
            } catch (e) {}
        }
        function u(e, t) {
            return K.nodeName(e, "table") && K.nodeName(11 !== t.nodeType ? t : t.firstChild, "tr") ? e.getElementsByTagName("tbody")[0] || e.appendChild(e.ownerDocument.createElement("tbody")) : e
        }
        function m(e) {
            return e.type = (null !== e.getAttribute("type")) + "/" + e.type, e
        }
        function _(e) {
            var t = qe.exec(e.type);
            return t ? e.type = t[1] : e.removeAttribute("type"), e
        }
        function g(e, t) {
            for (var n = 0, i = e.length; n < i; n++) _e.set(e[n], "globalEval", !t || _e.get(t[n], "globalEval"))
        }
        function d(e, t) {
            var n, i, o, r, a, s, l, c;
            if (1 === t.nodeType) {
                if (_e.hasData(e) && (r = _e.access(e), a = _e.set(t, r), c = r.events)) for (o in delete a.handle, a.events = {}, c) for (n = 0, i = c[o].length; n < i; n++) K.event.add(t, o, c[o][n]);
                ge.hasData(e) && (s = ge.access(e), l = K.extend({}, s), ge.set(t, l))
            }
        }
        function v(e, t) {
            var n = e.getElementsByTagName ? e.getElementsByTagName(t || "*") : e.querySelectorAll ? e.querySelectorAll(t || "*") : [];
            return t === undefined || t && K.nodeName(e, t) ? K.merge([e], n) : n
        }
        function h(e, t) {
            var n = t.nodeName.toLowerCase();
            "input" === n && Te.test(e.type) ? t.checked = e.checked : "input" !== n && "textarea" !== n || (t.defaultValue = e.defaultValue)
        }
        function y(e, t) {
            var n, i = K(t.createElement(e)).appendTo(t.body),
                o = p.getDefaultComputedStyle && (n = p.getDefaultComputedStyle(i[0])) ? n.display : K.css(i[0], "display");
            return i.detach(), o
        }
        function b(e) {
            var t = Z,
                n = Fe[e];
            return n || ("none" !== (n = y(e, t)) && n || ((t = (ze = (ze || K("<iframe frameborder='0' width='0' height='0'/>")).appendTo(t.documentElement))[0].contentDocument).write(), t.close(), n = y(e, t), ze.detach()), Fe[e] = n), n
        }
        function w(e, t, n) {
            var i, o, r, a, s = e.style;
            return (n = n || Ge(e)) && (a = n.getPropertyValue(t) || n[t]), n && ("" !== a || K.contains(e.ownerDocument, e) || (a = K.style(e, t)), Be.test(a) && He.test(t) && (i = s.width, o = s.minWidth, r = s.maxWidth, s.minWidth = s.maxWidth = s.width = a, a = n.width, s.width = i, s.minWidth = o, s.maxWidth = r)), a !== undefined ? a + "" : a
        }
        function x(e, t) {
            return {
                get: function() {
                    if (!e()) return (this.get = t).apply(this, arguments);
                    delete this.get
                }
            }
        }
        function k(e, t) {
            if (t in e) return t;
            for (var n = t[0].toUpperCase() + t.slice(1), i = t, o = Xe.length; o--;) if ((t = Xe[o] + n) in e) return t;
            return i
        }
        function C(e, t, n) {
            var i = Ue.exec(t);
            return i ? Math.max(0, i[1] - (n || 0)) + (i[2] || "px") : t
        }
        function T(e, t, n, i, o) {
            for (var r = n === (i ? "border" : "content") ? 4 : "width" === t ? 1 : 0, a = 0; r < 4; r += 2)"margin" === n && (a += K.css(e, n + ke[r], !0, o)), i ? ("content" === n && (a -= K.css(e, "padding" + ke[r], !0, o)), "margin" !== n && (a -= K.css(e, "border" + ke[r] + "Width", !0, o))) : (a += K.css(e, "padding" + ke[r], !0, o), "padding" !== n && (a += K.css(e, "border" + ke[r] + "Width", !0, o)));
            return a
        }
        function S(e, t, n) {
            var i = !0,
                o = "width" === t ? e.offsetWidth : e.offsetHeight,
                r = Ge(e),
                a = "border-box" === K.css(e, "boxSizing", !1, r);
            if (o <= 0 || null == o) {
                if (((o = w(e, t, r)) < 0 || null == o) && (o = e.style[t]), Be.test(o)) return o;
                i = a && (X.boxSizingReliable() || o === e.style[t]), o = parseFloat(o) || 0
            }
            return o + T(e, t, n || (a ? "border" : "content"), i, r) + "px"
        }
        function D(e, t) {
            for (var n, i, o, r = [], a = 0, s = e.length; a < s; a++)(i = e[a]).style && (r[a] = _e.get(i, "olddisplay"), n = i.style.display, t ? (r[a] || "none" !== n || (i.style.display = ""), "" === i.style.display && Ce(i) && (r[a] = _e.access(i, "olddisplay", b(i.nodeName)))) : (o = Ce(i), "none" === n && o || _e.set(i, "olddisplay", o ? n : K.css(i, "display"))));
            for (a = 0; a < s; a++)(i = e[a]).style && (t && "none" !== i.style.display && "" !== i.style.display || (i.style.display = t ? r[a] || "" : "none"));
            return e
        }
        function E(e, t, n, i, o) {
            return new E.prototype.init(e, t, n, i, o)
        }
        function I() {
            return setTimeout(function() {
                Ze = undefined
            }), Ze = K.now()
        }
        function N(e, t) {
            var n, i = 0,
                o = {
                    height: e
                };
            for (t = t ? 1 : 0; i < 4; i += 2 - t) o["margin" + (n = ke[i])] = o["padding" + n] = e;
            return t && (o.opacity = o.width = e), o
        }
        function M(e, t, n) {
            for (var i, o = (at[t] || []).concat(at["*"]), r = 0, a = o.length; r < a; r++) if (i = o[r].call(n, t, e)) return i
        }
        function P(t, e, n) {
            var i, o, r, a, s, l, c, u = this,
                d = {},
                f = t.style,
                h = t.nodeType && Ce(t),
                p = _e.get(t, "fxshow");
            for (i in n.queue || (null == (s = K._queueHooks(t, "fx")).unqueued && (s.unqueued = 0, l = s.empty.fire, s.empty.fire = function() {
                s.unqueued || l()
            }), s.unqueued++, u.always(function() {
                u.always(function() {
                    s.unqueued--, K.queue(t, "fx").length || s.empty.fire()
                })
            })), 1 === t.nodeType && ("height" in e || "width" in e) && (n.overflow = [f.overflow, f.overflowX, f.overflowY], "inline" === ("none" === (c = K.css(t, "display")) ? _e.get(t, "olddisplay") || b(t.nodeName) : c) && "none" === K.css(t, "float") && (f.display = "inline-block")), n.overflow && (f.overflow = "hidden", u.always(function() {
                f.overflow = n.overflow[0], f.overflowX = n.overflow[1], f.overflowY = n.overflow[2]
            })), e) if (o = e[i], nt.exec(o)) {
                if (delete e[i], r = r || "toggle" === o, o === (h ? "hide" : "show")) {
                    if ("show" !== o || !p || p[i] === undefined) continue;
                    h = !0
                }
                d[i] = p && p[i] || K.style(t, i)
            } else c = undefined;
            if (K.isEmptyObject(d))"inline" === ("none" === c ? b(t.nodeName) : c) && (f.display = c);
            else for (i in p ? "hidden" in p && (h = p.hidden) : p = _e.access(t, "fxshow", {}), r && (p.hidden = !h), h ? K(t).show() : u.done(function() {
                K(t).hide()
            }), u.done(function() {
                var e;
                for (e in _e.remove(t, "fxshow"), d) K.style(t, e, d[e])
            }), d) a = M(h ? p[i] : 0, i, u), i in p || (p[i] = a.start, h && (a.end = a.start, a.start = "width" === i || "height" === i ? 1 : 0))
        }
        function $(e, t) {
            var n, i, o, r, a;
            for (n in e) if (o = t[i = K.camelCase(n)], r = e[n], K.isArray(r) && (o = r[1], r = e[n] = r[0]), n !== i && (e[i] = r, delete e[n]), (a = K.cssHooks[i]) && "expand" in a) for (n in r = a.expand(r), delete e[i], r) n in e || (e[n] = r[n], t[n] = o);
            else t[i] = o
        }
        function A(r, e, t) {
            var n, a, i = 0,
                o = rt.length,
                s = K.Deferred().always(function() {
                    delete l.elem
                }),
                l = function() {
                    if (a) return !1;
                    for (var e = Ze || I(), t = Math.max(0, c.startTime + c.duration - e), n = 1 - (t / c.duration || 0), i = 0, o = c.tweens.length; i < o; i++) c.tweens[i].run(n);
                    return s.notifyWith(r, [c, n, t]), n < 1 && o ? t : (s.resolveWith(r, [c]), !1)
                },
                c = s.promise({
                    elem: r,
                    props: K.extend({}, e),
                    opts: K.extend(!0, {
                        specialEasing: {}
                    }, t),
                    originalProperties: e,
                    originalOptions: t,
                    startTime: Ze || I(),
                    duration: t.duration,
                    tweens: [],
                    createTween: function(e, t) {
                        var n = K.Tween(r, c.opts, e, t, c.opts.specialEasing[e] || c.opts.easing);
                        return c.tweens.push(n), n
                    },
                    stop: function(e) {
                        var t = 0,
                            n = e ? c.tweens.length : 0;
                        if (a) return this;
                        for (a = !0; t < n; t++) c.tweens[t].run(1);
                        return e ? s.resolveWith(r, [c, e]) : s.rejectWith(r, [c, e]), this
                    }
                }),
                u = c.props;
            for ($(u, c.opts.specialEasing); i < o; i++) if (n = rt[i].call(c, r, u, c.opts)) return n;
            return K.map(u, M, c), K.isFunction(c.opts.start) && c.opts.start.call(r, c), K.fx.timer(K.extend(l, {
                elem: r,
                anim: c,
                queue: c.opts.queue
            })), c.progress(c.opts.progress).done(c.opts.done, c.opts.complete).fail(c.opts.fail).always(c.opts.always)
        }
        function j(r) {
            return function(e, t) {
                "string" != typeof e && (t = e, e = "*");
                var n, i = 0,
                    o = e.toLowerCase().match(he) || [];
                if (K.isFunction(t)) for (; n = o[i++];)"+" === n[0] ? (n = n.slice(1) || "*", (r[n] = r[n] || []).unshift(t)) : (r[n] = r[n] || []).push(t)
            }
        }
        function L(t, o, r, a) {
            function s(e) {
                var i;
                return l[e] = !0, K.each(t[e] || [], function(e, t) {
                    var n = t(o, r, a);
                    return "string" != typeof n || c || l[n] ? c ? !(i = n) : void 0 : (o.dataTypes.unshift(n), s(n), !1)
                }), i
            }
            var l = {},
                c = t === kt;
            return s(o.dataTypes[0]) || !l["*"] && s("*")
        }
        function q(e, t) {
            var n, i, o = K.ajaxSettings.flatOptions || {};
            for (n in t) t[n] !== undefined && ((o[n] ? e : i || (i = {}))[n] = t[n]);
            return i && K.extend(!0, e, i), e
        }
        function O(e, t, n) {
            for (var i, o, r, a, s = e.contents, l = e.dataTypes;
                 "*" === l[0];) l.shift(), i === undefined && (i = e.mimeType || t.getResponseHeader("Content-Type"));
            if (i) for (o in s) if (s[o] && s[o].test(i)) {
                l.unshift(o);
                break
            }
            if (l[0] in n) r = l[0];
            else {
                for (o in n) {
                    if (!l[0] || e.converters[o + " " + l[0]]) {
                        r = o;
                        break
                    }
                    a || (a = o)
                }
                r = r || a
            }
            if (r) return r !== l[0] && l.unshift(r), n[r]
        }
        function R(e, t, n, i) {
            var o, r, a, s, l, c = {},
                u = e.dataTypes.slice();
            if (u[1]) for (a in e.converters) c[a.toLowerCase()] = e.converters[a];
            for (r = u.shift(); r;) if (e.responseFields[r] && (n[e.responseFields[r]] = t), !l && i && e.dataFilter && (t = e.dataFilter(t, e.dataType)), l = r, r = u.shift()) if ("*" === r) r = l;
            else if ("*" !== l && l !== r) {
                if (!(a = c[l + " " + r] || c["* " + r])) for (o in c) if ((s = o.split(" "))[1] === r && (a = c[l + " " + s[0]] || c["* " + s[0]])) {
                    !0 === a ? a = c[o] : !0 !== c[o] && (r = s[0], u.unshift(s[1]));
                    break
                }
                if (!0 !== a) if (a && e["throws"]) t = a(t);
                else try {
                        t = a(t)
                    } catch (d) {
                        return {
                            state: "parsererror",
                            error: a ? d : "No conversion from " + l + " to " + r
                        }
                    }
            }
            return {
                state: "success",
                data: t
            }
        }
        function z(n, e, i, o) {
            var t;
            if (K.isArray(e)) K.each(e, function(e, t) {
                i || Et.test(n) ? o(n, t) : z(n + "[" + ("object" == typeof t ? e : "") + "]", t, i, o)
            });
            else if (i || "object" !== K.type(e)) o(n, e);
            else for (t in e) z(n + "[" + t + "]", e[t], i, o)
        }
        function F(e) {
            return K.isWindow(e) ? e : 9 === e.nodeType && e.defaultView
        }
        var H = [],
            B = H.slice,
            G = H.concat,
            W = H.push,
            U = H.indexOf,
            V = {},
            Y = V.toString,
            Q = V.hasOwnProperty,
            X = {},
            Z = p.document,
            J = "2.1.4",
            K = function(e, t) {
                return new K.fn.init(e, t)
            },
            ee = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
            te = /^-ms-/,
            ne = /-([\da-z])/gi,
            ie = function(e, t) {
                return t.toUpperCase()
            };
        K.fn = K.prototype = {
            jquery: J,
            constructor: K,
            selector: "",
            length: 0,
            toArray: function() {
                return B.call(this)
            },
            get: function(e) {
                return null != e ? e < 0 ? this[e + this.length] : this[e] : B.call(this)
            },
            pushStack: function(e) {
                var t = K.merge(this.constructor(), e);
                return t.prevObject = this, t.context = this.context, t
            },
            each: function(e, t) {
                return K.each(this, e, t)
            },
            map: function(n) {
                return this.pushStack(K.map(this, function(e, t) {
                    return n.call(e, t, e)
                }))
            },
            slice: function() {
                return this.pushStack(B.apply(this, arguments))
            },
            first: function() {
                return this.eq(0)
            },
            last: function() {
                return this.eq(-1)
            },
            eq: function(e) {
                var t = this.length,
                    n = +e + (e < 0 ? t : 0);
                return this.pushStack(0 <= n && n < t ? [this[n]] : [])
            },
            end: function() {
                return this.prevObject || this.constructor(null)
            },
            push: W,
            sort: H.sort,
            splice: H.splice
        }, K.extend = K.fn.extend = function(e) {
            var t, n, i, o, r, a, s = e || {},
                l = 1,
                c = arguments.length,
                u = !1;
            for ("boolean" == typeof s && (u = s, s = arguments[l] || {}, l++), "object" == typeof s || K.isFunction(s) || (s = {}), l === c && (s = this, l--); l < c; l++) if (null != (t = arguments[l])) for (n in t) i = s[n], s !== (o = t[n]) && (u && o && (K.isPlainObject(o) || (r = K.isArray(o))) ? (r ? (r = !1, a = i && K.isArray(i) ? i : []) : a = i && K.isPlainObject(i) ? i : {}, s[n] = K.extend(u, a, o)) : o !== undefined && (s[n] = o));
            return s
        }, K.extend({
            expando: "jQuery" + (J + Math.random()).replace(/\D/g, ""),
            isReady: !0,
            error: function(e) {
                throw new Error(e)
            },
            noop: function() {},
            isFunction: function(e) {
                return "function" === K.type(e)
            },
            isArray: Array.isArray,
            isWindow: function(e) {
                return null != e && e === e.window
            },
            isNumeric: function(e) {
                return !K.isArray(e) && 0 <= e - parseFloat(e) + 1
            },
            isPlainObject: function(e) {
                return "object" === K.type(e) && !e.nodeType && !K.isWindow(e) && !(e.constructor && !Q.call(e.constructor.prototype, "isPrototypeOf"))
            },
            isEmptyObject: function(e) {
                var t;
                for (t in e) return !1;
                return !0
            },
            type: function(e) {
                return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? V[Y.call(e)] || "object" : typeof e
            },
            globalEval: function(e) {
                var t, n = eval;
                (e = K.trim(e)) && (1 === e.indexOf("use strict") ? ((t = Z.createElement("script")).text = e, Z.head.appendChild(t).parentNode.removeChild(t)) : n(e))
            },
            camelCase: function(e) {
                return e.replace(te, "ms-").replace(ne, ie)
            },
            nodeName: function(e, t) {
                return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase()
            },
            each: function(e, t, n) {
                var i = 0,
                    o = e.length,
                    r = s(e);
                if (n) {
                    if (r) for (; i < o && !1 !== t.apply(e[i], n); i++);
                    else for (i in e) if (!1 === t.apply(e[i], n)) break
                } else if (r) for (; i < o && !1 !== t.call(e[i], i, e[i]); i++);
                else for (i in e) if (!1 === t.call(e[i], i, e[i])) break;
                return e
            },
            trim: function(e) {
                return null == e ? "" : (e + "").replace(ee, "")
            },
            makeArray: function(e, t) {
                var n = t || [];
                return null != e && (s(Object(e)) ? K.merge(n, "string" == typeof e ? [e] : e) : W.call(n, e)), n
            },
            inArray: function(e, t, n) {
                return null == t ? -1 : U.call(t, e, n)
            },
            merge: function(e, t) {
                for (var n = +t.length, i = 0, o = e.length; i < n; i++) e[o++] = t[i];
                return e.length = o, e
            },
            grep: function(e, t, n) {
                for (var i = [], o = 0, r = e.length, a = !n; o < r; o++)!t(e[o], o) !== a && i.push(e[o]);
                return i
            },
            map: function(e, t, n) {
                var i, o = 0,
                    r = e.length,
                    a = [];
                if (s(e)) for (; o < r; o++) null != (i = t(e[o], o, n)) && a.push(i);
                else for (o in e) null != (i = t(e[o], o, n)) && a.push(i);
                return G.apply([], a)
            },
            guid: 1,
            proxy: function(e, t) {
                var n, i, o;
                return "string" == typeof t && (n = e[t], t = e, e = n), K.isFunction(e) ? (i = B.call(arguments, 2), (o = function() {
                    return e.apply(t || this, i.concat(B.call(arguments)))
                }).guid = e.guid = e.guid || K.guid++, o) : undefined
            },
            now: Date.now,
            support: X
        }), K.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(e, t) {
            V["[object " + t + "]"] = t.toLowerCase()
        });
        var oe = function(n) {
            function b(e, t, n, i) {
                var o, r, a, s, l, c, u, d, f, h;
                if ((t ? t.ownerDocument || t : z) !== P && M(t), n = n || [], s = (t = t || P).nodeType, "string" != typeof e || !e || 1 !== s && 9 !== s && 11 !== s) return n;
                if (!i && A) {
                    if (11 !== s && (o = ve.exec(e))) if (a = o[1]) {
                        if (9 === s) {
                            if (!(r = t.getElementById(a)) || !r.parentNode) return n;
                            if (r.id === a) return n.push(r), n
                        } else if (t.ownerDocument && (r = t.ownerDocument.getElementById(a)) && O(t, r) && r.id === a) return n.push(r), n
                    } else {
                        if (o[2]) return J.apply(n, t.getElementsByTagName(e)), n;
                        if ((a = o[3]) && g.getElementsByClassName) return J.apply(n, t.getElementsByClassName(a)), n
                    }
                    if (g.qsa && (!j || !j.test(e))) {
                        if (d = u = R, f = t, h = 1 !== s && e, 1 === s && "object" !== t.nodeName.toLowerCase()) {
                            for (c = T(e), (u = t.getAttribute("id")) ? d = u.replace(be, "\\$&") : t.setAttribute("id", d), d = "[id='" + d + "'] ", l = c.length; l--;) c[l] = d + _(c[l]);
                            f = ye.test(e) && m(t.parentNode) || t, h = c.join(",")
                        }
                        if (h) try {
                            return J.apply(n, f.querySelectorAll(h)), n
                        } catch (p) {} finally {
                            u || t.removeAttribute("id")
                        }
                    }
                }
                return D(e.replace(le, "$1"), t, n, i)
            }
            function e() {
                function n(e, t) {
                    return i.push(e + " ") > x.cacheLength && delete n[i.shift()], n[e + " "] = t
                }
                var i = [];
                return n
            }
            function l(e) {
                return e[R] = !0, e
            }
            function i(e) {
                var t = P.createElement("div");
                try {
                    return !!e(t)
                } catch (n) {
                    return !1
                } finally {
                    t.parentNode && t.parentNode.removeChild(t), t = null
                }
            }
            function t(e, t) {
                for (var n = e.split("|"), i = e.length; i--;) x.attrHandle[n[i]] = t
            }
            function c(e, t) {
                var n = t && e,
                    i = n && 1 === e.nodeType && 1 === t.nodeType && (~t.sourceIndex || V) - (~e.sourceIndex || V);
                if (i) return i;
                if (n) for (; n = n.nextSibling;) if (n === t) return -1;
                return e ? 1 : -1
            }
            function o(t) {
                return function(e) {
                    return "input" === e.nodeName.toLowerCase() && e.type === t
                }
            }
            function r(n) {
                return function(e) {
                    var t = e.nodeName.toLowerCase();
                    return ("input" === t || "button" === t) && e.type === n
                }
            }
            function a(a) {
                return l(function(r) {
                    return r = +r, l(function(e, t) {
                        for (var n, i = a([], e.length, r), o = i.length; o--;) e[n = i[o]] && (e[n] = !(t[n] = e[n]))
                    })
                })
            }
            function m(e) {
                return e && "undefined" != typeof e.getElementsByTagName && e
            }
            function s() {}
            function _(e) {
                for (var t = 0, n = e.length, i = ""; t < n; t++) i += e[t].value;
                return i
            }
            function d(a, e, t) {
                var s = e.dir,
                    l = t && "parentNode" === s,
                    c = H++;
                return e.first ?
                    function(e, t, n) {
                        for (; e = e[s];) if (1 === e.nodeType || l) return a(e, t, n)
                    } : function(e, t, n) {
                        var i, o, r = [F, c];
                        if (n) {
                            for (; e = e[s];) if ((1 === e.nodeType || l) && a(e, t, n)) return !0
                        } else for (; e = e[s];) if (1 === e.nodeType || l) {
                            if ((i = (o = e[R] || (e[R] = {}))[s]) && i[0] === F && i[1] === c) return r[2] = i[2];
                            if ((o[s] = r)[2] = a(e, t, n)) return !0
                        }
                    }
            }
            function f(o) {
                return 1 < o.length ?
                    function(e, t, n) {
                        for (var i = o.length; i--;) if (!o[i](e, t, n)) return !1;
                        return !0
                    } : o[0]
            }
            function v(e, t, n) {
                for (var i = 0, o = t.length; i < o; i++) b(e, t[i], n);
                return n
            }
            function w(e, t, n, i, o) {
                for (var r, a = [], s = 0, l = e.length, c = null != t; s < l; s++)(r = e[s]) && (n && !n(r, i, o) || (a.push(r), c && t.push(s)));
                return a
            }
            function y(h, p, m, _, g, e) {
                return _ && !_[R] && (_ = y(_)), g && !g[R] && (g = y(g, e)), l(function(e, t, n, i) {
                    var o, r, a, s = [],
                        l = [],
                        c = t.length,
                        u = e || v(p || "*", n.nodeType ? [n] : n, []),
                        d = !h || !e && p ? u : w(u, s, h, n, i),
                        f = m ? g || (e ? h : c || _) ? [] : t : d;
                    if (m && m(d, f, n, i), _) for (o = w(f, l), _(o, [], n, i), r = o.length; r--;)(a = o[r]) && (f[l[r]] = !(d[l[r]] = a));
                    if (e) {
                        if (g || h) {
                            if (g) {
                                for (o = [], r = f.length; r--;)(a = f[r]) && o.push(d[r] = a);
                                g(null, f = [], o, i)
                            }
                            for (r = f.length; r--;)(a = f[r]) && -1 < (o = g ? ee(e, a) : s[r]) && (e[o] = !(t[o] = a))
                        }
                    } else f = w(f === t ? f.splice(c, f.length) : f), g ? g(null, t, f, i) : J.apply(t, f)
                })
            }
            function h(e) {
                for (var o, t, n, i = e.length, r = x.relative[e[0].type], a = r || x.relative[" "], s = r ? 1 : 0, l = d(function(e) {
                    return e === o
                }, a, !0), c = d(function(e) {
                    return -1 < ee(o, e)
                }, a, !0), u = [function(e, t, n) {
                    var i = !r && (n || t !== E) || ((o = t).nodeType ? l(e, t, n) : c(e, t, n));
                    return o = null, i
                }]; s < i; s++) if (t = x.relative[e[s].type]) u = [d(f(u), t)];
                else {
                    if ((t = x.filter[e[s].type].apply(null, e[s].matches))[R]) {
                        for (n = ++s; n < i && !x.relative[e[n].type]; n++);
                        return y(1 < s && f(u), 1 < s && _(e.slice(0, s - 1).concat({
                                value: " " === e[s - 2].type ? "*" : ""
                            })).replace(le, "$1"), t, s < n && h(e.slice(s, n)), n < i && h(e = e.slice(n)), n < i && _(e))
                    }
                    u.push(t)
                }
                return f(u)
            }
            function u(_, g) {
                var v = 0 < g.length,
                    y = 0 < _.length,
                    e = function(e, t, n, i, o) {
                        var r, a, s, l = 0,
                            c = "0",
                            u = e && [],
                            d = [],
                            f = E,
                            h = e || y && x.find.TAG("*", o),
                            p = F += null == f ? 1 : Math.random() || .1,
                            m = h.length;
                        for (o && (E = t !== P && t); c !== m && null != (r = h[c]); c++) {
                            if (y && r) {
                                for (a = 0; s = _[a++];) if (s(r, t, n)) {
                                    i.push(r);
                                    break
                                }
                                o && (F = p)
                            }
                            v && ((r = !s && r) && l--, e && u.push(r))
                        }
                        if (l += c, v && c !== l) {
                            for (a = 0; s = g[a++];) s(u, d, t, n);
                            if (e) {
                                if (0 < l) for (; c--;) u[c] || d[c] || (d[c] = X.call(i));
                                d = w(d)
                            }
                            J.apply(i, d), o && !e && 0 < d.length && 1 < l + g.length && b.uniqueSort(i)
                        }
                        return o && (F = p, E = f), u
                    };
                return v ? l(e) : e
            }
            var p, g, x, k, C, T, S, D, E, I, N, M, P, $, A, j, L, q, O, R = "sizzle" + 1 * new Date,
                z = n.document,
                F = 0,
                H = 0,
                B = e(),
                G = e(),
                W = e(),
                U = function(e, t) {
                    return e === t && (N = !0), 0
                },
                V = 1 << 31,
                Y = {}.hasOwnProperty,
                Q = [],
                X = Q.pop,
                Z = Q.push,
                J = Q.push,
                K = Q.slice,
                ee = function(e, t) {
                    for (var n = 0, i = e.length; n < i; n++) if (e[n] === t) return n;
                    return -1
                },
                te = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
                ne = "[\\x20\\t\\r\\n\\f]",
                ie = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
                oe = ie.replace("w", "w#"),
                re = "\\[" + ne + "*(" + ie + ")(?:" + ne + "*([*^$|!~]?=)" + ne + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + oe + "))|)" + ne + "*\\]",
                ae = ":(" + ie + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + re + ")*)|.*)\\)|)",
                se = new RegExp(ne + "+", "g"),
                le = new RegExp("^" + ne + "+|((?:^|[^\\\\])(?:\\\\.)*)" + ne + "+$", "g"),
                ce = new RegExp("^" + ne + "*," + ne + "*"),
                ue = new RegExp("^" + ne + "*([>+~]|" + ne + ")" + ne + "*"),
                de = new RegExp("=" + ne + "*([^\\]'\"]*?)" + ne + "*\\]", "g"),
                fe = new RegExp(ae),
                he = new RegExp("^" + oe + "$"),
                pe = {
                    ID: new RegExp("^#(" + ie + ")"),
                    CLASS: new RegExp("^\\.(" + ie + ")"),
                    TAG: new RegExp("^(" + ie.replace("w", "w*") + ")"),
                    ATTR: new RegExp("^" + re),
                    PSEUDO: new RegExp("^" + ae),
                    CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + ne + "*(even|odd|(([+-]|)(\\d*)n|)" + ne + "*(?:([+-]|)" + ne + "*(\\d+)|))" + ne + "*\\)|)", "i"),
                    bool: new RegExp("^(?:" + te + ")$", "i"),
                    needsContext: new RegExp("^" + ne + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + ne + "*((?:-\\d)?\\d*)" + ne + "*\\)|)(?=[^-]|$)", "i")
                },
                me = /^(?:input|select|textarea|button)$/i,
                _e = /^h\d$/i,
                ge = /^[^{]+\{\s*\[native \w/,
                ve = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
                ye = /[+~]/,
                be = /'|\\/g,
                we = new RegExp("\\\\([\\da-f]{1,6}" + ne + "?|(" + ne + ")|.)", "ig"),
                xe = function(e, t, n) {
                    var i = "0x" + t - 65536;
                    return i != i || n ? t : i < 0 ? String.fromCharCode(i + 65536) : String.fromCharCode(i >> 10 | 55296, 1023 & i | 56320)
                },
                ke = function() {
                    M()
                };
            try {
                J.apply(Q = K.call(z.childNodes), z.childNodes), Q[z.childNodes.length].nodeType
            } catch (Ce) {
                J = {
                    apply: Q.length ?
                        function(e, t) {
                            Z.apply(e, K.call(t))
                        } : function(e, t) {
                            for (var n = e.length, i = 0; e[n++] = t[i++];);
                            e.length = n - 1
                        }
                }
            }
            for (p in g = b.support = {}, C = b.isXML = function(e) {
                var t = e && (e.ownerDocument || e).documentElement;
                return !!t && "HTML" !== t.nodeName
            }, M = b.setDocument = function(e) {
                var t, n, l = e ? e.ownerDocument || e : z;
                return l !== P && 9 === l.nodeType && l.documentElement ? ($ = (P = l).documentElement, (n = l.defaultView) && n !== n.top && (n.addEventListener ? n.addEventListener("unload", ke, !1) : n.attachEvent && n.attachEvent("onunload", ke)), A = !C(l), g.attributes = i(function(e) {
                    return e.className = "i", !e.getAttribute("className")
                }), g.getElementsByTagName = i(function(e) {
                    return e.appendChild(l.createComment("")), !e.getElementsByTagName("*").length
                }), g.getElementsByClassName = ge.test(l.getElementsByClassName), g.getById = i(function(e) {
                    return $.appendChild(e).id = R, !l.getElementsByName || !l.getElementsByName(R).length
                }), g.getById ? (x.find.ID = function(e, t) {
                    if ("undefined" != typeof t.getElementById && A) {
                        var n = t.getElementById(e);
                        return n && n.parentNode ? [n] : []
                    }
                }, x.filter.ID = function(e) {
                    var t = e.replace(we, xe);
                    return function(e) {
                        return e.getAttribute("id") === t
                    }
                }) : (delete x.find.ID, x.filter.ID = function(e) {
                    var n = e.replace(we, xe);
                    return function(e) {
                        var t = "undefined" != typeof e.getAttributeNode && e.getAttributeNode("id");
                        return t && t.value === n
                    }
                }), x.find.TAG = g.getElementsByTagName ?
                    function(e, t) {
                        return "undefined" != typeof t.getElementsByTagName ? t.getElementsByTagName(e) : g.qsa ? t.querySelectorAll(e) : void 0
                    } : function(e, t) {
                        var n, i = [],
                            o = 0,
                            r = t.getElementsByTagName(e);
                        if ("*" === e) {
                            for (; n = r[o++];) 1 === n.nodeType && i.push(n);
                            return i
                        }
                        return r
                    }, x.find.CLASS = g.getElementsByClassName &&
                    function(e, t) {
                        if (A) return t.getElementsByClassName(e)
                    }, L = [], j = [], (g.qsa = ge.test(l.querySelectorAll)) && (i(function(e) {
                    $.appendChild(e).innerHTML = "<a id='" + R + "'></a><select id='" + R + "-\f]' msallowcapture=''><option selected=''></option></select>", e.querySelectorAll("[msallowcapture^='']").length && j.push("[*^$]=" + ne + "*(?:''|\"\")"), e.querySelectorAll("[selected]").length || j.push("\\[" + ne + "*(?:value|" + te + ")"), e.querySelectorAll("[id~=" + R + "-]").length || j.push("~="), e.querySelectorAll(":checked").length || j.push(":checked"), e.querySelectorAll("a#" + R + "+*").length || j.push(".#.+[+~]")
                }), i(function(e) {
                    var t = l.createElement("input");
                    t.setAttribute("type", "hidden"), e.appendChild(t).setAttribute("name", "D"), e.querySelectorAll("[name=d]").length && j.push("name" + ne + "*[*^$|!~]?="), e.querySelectorAll(":enabled").length || j.push(":enabled", ":disabled"), e.querySelectorAll("*,:x"), j.push(",.*:")
                })), (g.matchesSelector = ge.test(q = $.matches || $.webkitMatchesSelector || $.mozMatchesSelector || $.oMatchesSelector || $.msMatchesSelector)) && i(function(e) {
                    g.disconnectedMatch = q.call(e, "div"), q.call(e, "[s!='']:x"), L.push("!=", ae)
                }), j = j.length && new RegExp(j.join("|")), L = L.length && new RegExp(L.join("|")), t = ge.test($.compareDocumentPosition), O = t || ge.test($.contains) ?
                    function(e, t) {
                        var n = 9 === e.nodeType ? e.documentElement : e,
                            i = t && t.parentNode;
                        return e === i || !(!i || 1 !== i.nodeType || !(n.contains ? n.contains(i) : e.compareDocumentPosition && 16 & e.compareDocumentPosition(i)))
                    } : function(e, t) {
                        if (t) for (; t = t.parentNode;) if (t === e) return !0;
                        return !1
                    }, U = t ?
                    function(e, t) {
                        if (e === t) return N = !0, 0;
                        var n = !e.compareDocumentPosition - !t.compareDocumentPosition;
                        return n || (1 & (n = (e.ownerDocument || e) === (t.ownerDocument || t) ? e.compareDocumentPosition(t) : 1) || !g.sortDetached && t.compareDocumentPosition(e) === n ? e === l || e.ownerDocument === z && O(z, e) ? -1 : t === l || t.ownerDocument === z && O(z, t) ? 1 : I ? ee(I, e) - ee(I, t) : 0 : 4 & n ? -1 : 1)
                    } : function(e, t) {
                        if (e === t) return N = !0, 0;
                        var n, i = 0,
                            o = e.parentNode,
                            r = t.parentNode,
                            a = [e],
                            s = [t];
                        if (!o || !r) return e === l ? -1 : t === l ? 1 : o ? -1 : r ? 1 : I ? ee(I, e) - ee(I, t) : 0;
                        if (o === r) return c(e, t);
                        for (n = e; n = n.parentNode;) a.unshift(n);
                        for (n = t; n = n.parentNode;) s.unshift(n);
                        for (; a[i] === s[i];) i++;
                        return i ? c(a[i], s[i]) : a[i] === z ? -1 : s[i] === z ? 1 : 0
                    }, l) : P
            }, b.matches = function(e, t) {
                return b(e, null, null, t)
            }, b.matchesSelector = function(e, t) {
                if ((e.ownerDocument || e) !== P && M(e), t = t.replace(de, "='$1']"), g.matchesSelector && A && (!L || !L.test(t)) && (!j || !j.test(t))) try {
                    var n = q.call(e, t);
                    if (n || g.disconnectedMatch || e.document && 11 !== e.document.nodeType) return n
                } catch (Ce) {}
                return 0 < b(t, P, null, [e]).length
            }, b.contains = function(e, t) {
                return (e.ownerDocument || e) !== P && M(e), O(e, t)
            }, b.attr = function(e, t) {
                (e.ownerDocument || e) !== P && M(e);
                var n = x.attrHandle[t.toLowerCase()],
                    i = n && Y.call(x.attrHandle, t.toLowerCase()) ? n(e, t, !A) : undefined;
                return i !== undefined ? i : g.attributes || !A ? e.getAttribute(t) : (i = e.getAttributeNode(t)) && i.specified ? i.value : null
            }, b.error = function(e) {
                throw new Error("Syntax error, unrecognized expression: " + e)
            }, b.uniqueSort = function(e) {
                var t, n = [],
                    i = 0,
                    o = 0;
                if (N = !g.detectDuplicates, I = !g.sortStable && e.slice(0), e.sort(U), N) {
                    for (; t = e[o++];) t === e[o] && (i = n.push(o));
                    for (; i--;) e.splice(n[i], 1)
                }
                return I = null, e
            }, k = b.getText = function(e) {
                var t, n = "",
                    i = 0,
                    o = e.nodeType;
                if (o) {
                    if (1 === o || 9 === o || 11 === o) {
                        if ("string" == typeof e.textContent) return e.textContent;
                        for (e = e.firstChild; e; e = e.nextSibling) n += k(e)
                    } else if (3 === o || 4 === o) return e.nodeValue
                } else for (; t = e[i++];) n += k(t);
                return n
            }, (x = b.selectors = {
                cacheLength: 50,
                createPseudo: l,
                match: pe,
                attrHandle: {},
                find: {},
                relative: {
                    ">": {
                        dir: "parentNode",
                        first: !0
                    },
                    " ": {
                        dir: "parentNode"
                    },
                    "+": {
                        dir: "previousSibling",
                        first: !0
                    },
                    "~": {
                        dir: "previousSibling"
                    }
                },
                preFilter: {
                    ATTR: function(e) {
                        return e[1] = e[1].replace(we, xe), e[3] = (e[3] || e[4] || e[5] || "").replace(we, xe), "~=" === e[2] && (e[3] = " " + e[3] + " "), e.slice(0, 4)
                    },
                    CHILD: function(e) {
                        return e[1] = e[1].toLowerCase(), "nth" === e[1].slice(0, 3) ? (e[3] || b.error(e[0]), e[4] = +(e[4] ? e[5] + (e[6] || 1) : 2 * ("even" === e[3] || "odd" === e[3])), e[5] = +(e[7] + e[8] || "odd" === e[3])) : e[3] && b.error(e[0]), e
                    },
                    PSEUDO: function(e) {
                        var t, n = !e[6] && e[2];
                        return pe.CHILD.test(e[0]) ? null : (e[3] ? e[2] = e[4] || e[5] || "" : n && fe.test(n) && (t = T(n, !0)) && (t = n.indexOf(")", n.length - t) - n.length) && (e[0] = e[0].slice(0, t), e[2] = n.slice(0, t)), e.slice(0, 3))
                    }
                },
                filter: {
                    TAG: function(e) {
                        var t = e.replace(we, xe).toLowerCase();
                        return "*" === e ?
                            function() {
                                return !0
                            } : function(e) {
                                return e.nodeName && e.nodeName.toLowerCase() === t
                            }
                    },
                    CLASS: function(e) {
                        var t = B[e + " "];
                        return t || (t = new RegExp("(^|" + ne + ")" + e + "(" + ne + "|$)")) && B(e, function(e) {
                                return t.test("string" == typeof e.className && e.className || "undefined" != typeof e.getAttribute && e.getAttribute("class") || "")
                            })
                    },
                    ATTR: function(n, i, o) {
                        return function(e) {
                            var t = b.attr(e, n);
                            return null == t ? "!=" === i : !i || (t += "", "=" === i ? t === o : "!=" === i ? t !== o : "^=" === i ? o && 0 === t.indexOf(o) : "*=" === i ? o && -1 < t.indexOf(o) : "$=" === i ? o && t.slice(-o.length) === o : "~=" === i ? -1 < (" " + t.replace(se, " ") + " ").indexOf(o) : "|=" === i && (t === o || t.slice(0, o.length + 1) === o + "-"))
                        }
                    },
                    CHILD: function(h, e, t, p, m) {
                        var _ = "nth" !== h.slice(0, 3),
                            g = "last" !== h.slice(-4),
                            v = "of-type" === e;
                        return 1 === p && 0 === m ?
                            function(e) {
                                return !!e.parentNode
                            } : function(e, t, n) {
                                var i, o, r, a, s, l, c = _ !== g ? "nextSibling" : "previousSibling",
                                    u = e.parentNode,
                                    d = v && e.nodeName.toLowerCase(),
                                    f = !n && !v;
                                if (u) {
                                    if (_) {
                                        for (; c;) {
                                            for (r = e; r = r[c];) if (v ? r.nodeName.toLowerCase() === d : 1 === r.nodeType) return !1;
                                            l = c = "only" === h && !l && "nextSibling"
                                        }
                                        return !0
                                    }
                                    if (l = [g ? u.firstChild : u.lastChild], g && f) {
                                        for (s = (i = (o = u[R] || (u[R] = {}))[h] || [])[0] === F && i[1], a = i[0] === F && i[2], r = s && u.childNodes[s]; r = ++s && r && r[c] || (a = s = 0) || l.pop();) if (1 === r.nodeType && ++a && r === e) {
                                            o[h] = [F, s, a];
                                            break
                                        }
                                    } else if (f && (i = (e[R] || (e[R] = {}))[h]) && i[0] === F) a = i[1];
                                    else for (;
                                            (r = ++s && r && r[c] || (a = s = 0) || l.pop()) && ((v ? r.nodeName.toLowerCase() !== d : 1 !== r.nodeType) || !++a || (f && ((r[R] || (r[R] = {}))[h] = [F, a]), r !== e)););
                                    return (a -= m) === p || a % p == 0 && 0 <= a / p
                                }
                            }
                    },
                    PSEUDO: function(e, r) {
                        var t, a = x.pseudos[e] || x.setFilters[e.toLowerCase()] || b.error("unsupported pseudo: " + e);
                        return a[R] ? a(r) : 1 < a.length ? (t = [e, e, "", r], x.setFilters.hasOwnProperty(e.toLowerCase()) ? l(function(e, t) {
                            for (var n, i = a(e, r), o = i.length; o--;) e[n = ee(e, i[o])] = !(t[n] = i[o])
                        }) : function(e) {
                            return a(e, 0, t)
                        }) : a
                    }
                },
                pseudos: {
                    not: l(function(e) {
                        var i = [],
                            o = [],
                            s = S(e.replace(le, "$1"));
                        return s[R] ? l(function(e, t, n, i) {
                            for (var o, r = s(e, null, i, []), a = e.length; a--;)(o = r[a]) && (e[a] = !(t[a] = o))
                        }) : function(e, t, n) {
                            return i[0] = e, s(i, null, n, o), i[0] = null, !o.pop()
                        }
                    }),
                    has: l(function(t) {
                        return function(e) {
                            return 0 < b(t, e).length
                        }
                    }),
                    contains: l(function(t) {
                        return t = t.replace(we, xe), function(e) {
                            return -1 < (e.textContent || e.innerText || k(e)).indexOf(t)
                        }
                    }),
                    lang: l(function(n) {
                        return he.test(n || "") || b.error("unsupported lang: " + n), n = n.replace(we, xe).toLowerCase(), function(e) {
                            var t;
                            do {
                                if (t = A ? e.lang : e.getAttribute("xml:lang") || e.getAttribute("lang")) return (t = t.toLowerCase()) === n || 0 === t.indexOf(n + "-")
                            } while ((e = e.parentNode) && 1 === e.nodeType);
                            return !1
                        }
                    }),
                    target: function(e) {
                        var t = n.location && n.location.hash;
                        return t && t.slice(1) === e.id
                    },
                    root: function(e) {
                        return e === $
                    },
                    focus: function(e) {
                        return e === P.activeElement && (!P.hasFocus || P.hasFocus()) && !! (e.type || e.href || ~e.tabIndex)
                    },
                    enabled: function(e) {
                        return !1 === e.disabled
                    },
                    disabled: function(e) {
                        return !0 === e.disabled
                    },
                    checked: function(e) {
                        var t = e.nodeName.toLowerCase();
                        return "input" === t && !! e.checked || "option" === t && !! e.selected
                    },
                    selected: function(e) {
                        return e.parentNode && e.parentNode.selectedIndex, !0 === e.selected
                    },
                    empty: function(e) {
                        for (e = e.firstChild; e; e = e.nextSibling) if (e.nodeType < 6) return !1;
                        return !0
                    },
                    parent: function(e) {
                        return !x.pseudos.empty(e)
                    },
                    header: function(e) {
                        return _e.test(e.nodeName)
                    },
                    input: function(e) {
                        return me.test(e.nodeName)
                    },
                    button: function(e) {
                        var t = e.nodeName.toLowerCase();
                        return "input" === t && "button" === e.type || "button" === t
                    },
                    text: function(e) {
                        var t;
                        return "input" === e.nodeName.toLowerCase() && "text" === e.type && (null == (t = e.getAttribute("type")) || "text" === t.toLowerCase())
                    },
                    first: a(function() {
                        return [0]
                    }),
                    last: a(function(e, t) {
                        return [t - 1]
                    }),
                    eq: a(function(e, t, n) {
                        return [n < 0 ? n + t : n]
                    }),
                    even: a(function(e, t) {
                        for (var n = 0; n < t; n += 2) e.push(n);
                        return e
                    }),
                    odd: a(function(e, t) {
                        for (var n = 1; n < t; n += 2) e.push(n);
                        return e
                    }),
                    lt: a(function(e, t, n) {
                        for (var i = n < 0 ? n + t : n; 0 <= --i;) e.push(i);
                        return e
                    }),
                    gt: a(function(e, t, n) {
                        for (var i = n < 0 ? n + t : n; ++i < t;) e.push(i);
                        return e
                    })
                }
            }).pseudos.nth = x.pseudos.eq, {
                radio: !0,
                checkbox: !0,
                file: !0,
                password: !0,
                image: !0
            }) x.pseudos[p] = o(p);
            for (p in {
                submit: !0,
                reset: !0
            }) x.pseudos[p] = r(p);
            return s.prototype = x.filters = x.pseudos, x.setFilters = new s, T = b.tokenize = function(e, t) {
                var n, i, o, r, a, s, l, c = G[e + " "];
                if (c) return t ? 0 : c.slice(0);
                for (a = e, s = [], l = x.preFilter; a;) {
                    for (r in n && !(i = ce.exec(a)) || (i && (a = a.slice(i[0].length) || a), s.push(o = [])), n = !1, (i = ue.exec(a)) && (n = i.shift(), o.push({
                        value: n,
                        type: i[0].replace(le, " ")
                    }), a = a.slice(n.length)), x.filter)!(i = pe[r].exec(a)) || l[r] && !(i = l[r](i)) || (n = i.shift(), o.push({
                        value: n,
                        type: r,
                        matches: i
                    }), a = a.slice(n.length));
                    if (!n) break
                }
                return t ? a.length : a ? b.error(e) : G(e, s).slice(0)
            }, S = b.compile = function(e, t) {
                var n, i = [],
                    o = [],
                    r = W[e + " "];
                if (!r) {
                    for (t || (t = T(e)), n = t.length; n--;)(r = h(t[n]))[R] ? i.push(r) : o.push(r);
                    (r = W(e, u(o, i))).selector = e
                }
                return r
            }, D = b.select = function(e, t, n, i) {
                var o, r, a, s, l, c = "function" == typeof e && e,
                    u = !i && T(e = c.selector || e);
                if (n = n || [], 1 === u.length) {
                    if (2 < (r = u[0] = u[0].slice(0)).length && "ID" === (a = r[0]).type && g.getById && 9 === t.nodeType && A && x.relative[r[1].type]) {
                        if (!(t = (x.find.ID(a.matches[0].replace(we, xe), t) || [])[0])) return n;
                        c && (t = t.parentNode), e = e.slice(r.shift().value.length)
                    }
                    for (o = pe.needsContext.test(e) ? 0 : r.length; o-- && (a = r[o], !x.relative[s = a.type]);) if ((l = x.find[s]) && (i = l(a.matches[0].replace(we, xe), ye.test(r[0].type) && m(t.parentNode) || t))) {
                        if (r.splice(o, 1), !(e = i.length && _(r))) return J.apply(n, i), n;
                        break
                    }
                }
                return (c || S(e, u))(i, t, !A, n, ye.test(e) && m(t.parentNode) || t), n
            }, g.sortStable = R.split("").sort(U).join("") === R, g.detectDuplicates = !! N, M(), g.sortDetached = i(function(e) {
                return 1 & e.compareDocumentPosition(P.createElement("div"))
            }), i(function(e) {
                return e.innerHTML = "<a href='#'></a>", "#" === e.firstChild.getAttribute("href")
            }) || t("type|href|height|width", function(e, t, n) {
                if (!n) return e.getAttribute(t, "type" === t.toLowerCase() ? 1 : 2)
            }), g.attributes && i(function(e) {
                return e.innerHTML = "<input/>", e.firstChild.setAttribute("value", ""), "" === e.firstChild.getAttribute("value")
            }) || t("value", function(e, t, n) {
                if (!n && "input" === e.nodeName.toLowerCase()) return e.defaultValue
            }), i(function(e) {
                return null == e.getAttribute("disabled")
            }) || t(te, function(e, t, n) {
                var i;
                if (!n) return !0 === e[t] ? t.toLowerCase() : (i = e.getAttributeNode(t)) && i.specified ? i.value : null
            }), b
        }(p);
        K.find = oe, K.expr = oe.selectors, K.expr[":"] = K.expr.pseudos, K.unique = oe.uniqueSort, K.text = oe.getText, K.isXMLDoc = oe.isXML, K.contains = oe.contains;
        var re = K.expr.match.needsContext,
            ae = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
            se = /^.[^:#\[\.,]*$/;
        K.filter = function(e, t, n) {
            var i = t[0];
            return n && (e = ":not(" + e + ")"), 1 === t.length && 1 === i.nodeType ? K.find.matchesSelector(i, e) ? [i] : [] : K.find.matches(e, K.grep(t, function(e) {
                return 1 === e.nodeType
            }))
        }, K.fn.extend({
            find: function(e) {
                var t, n = this.length,
                    i = [],
                    o = this;
                if ("string" != typeof e) return this.pushStack(K(e).filter(function() {
                    for (t = 0; t < n; t++) if (K.contains(o[t], this)) return !0
                }));
                for (t = 0; t < n; t++) K.find(e, o[t], i);
                return (i = this.pushStack(1 < n ? K.unique(i) : i)).selector = this.selector ? this.selector + " " + e : e, i
            },
            filter: function(e) {
                return this.pushStack(t(this, e || [], !1))
            },
            not: function(e) {
                return this.pushStack(t(this, e || [], !0))
            },
            is: function(e) {
                return !!t(this, "string" == typeof e && re.test(e) ? K(e) : e || [], !1).length
            }
        });
        var le, ce = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/;
        (K.fn.init = function(e, t) {
            var n, i;
            if (!e) return this;
            if ("string" == typeof e) {
                if (!(n = "<" === e[0] && ">" === e[e.length - 1] && 3 <= e.length ? [null, e, null] : ce.exec(e)) || !n[1] && t) return !t || t.jquery ? (t || le).find(e) : this.constructor(t).find(e);
                if (n[1]) {
                    if (t = t instanceof K ? t[0] : t, K.merge(this, K.parseHTML(n[1], t && t.nodeType ? t.ownerDocument || t : Z, !0)), ae.test(n[1]) && K.isPlainObject(t)) for (n in t) K.isFunction(this[n]) ? this[n](t[n]) : this.attr(n, t[n]);
                    return this
                }
                return (i = Z.getElementById(n[2])) && i.parentNode && (this.length = 1, this[0] = i), this.context = Z, this.selector = e, this
            }
            return e.nodeType ? (this.context = this[0] = e, this.length = 1, this) : K.isFunction(e) ? "undefined" != typeof le.ready ? le.ready(e) : e(K) : (e.selector !== undefined && (this.selector = e.selector, this.context = e.context), K.makeArray(e, this))
        }).prototype = K.fn, le = K(Z);
        var ue = /^(?:parents|prev(?:Until|All))/,
            de = {
                children: !0,
                contents: !0,
                next: !0,
                prev: !0
            };
        K.extend({
            dir: function(e, t, n) {
                for (var i = [], o = n !== undefined;
                     (e = e[t]) && 9 !== e.nodeType;) if (1 === e.nodeType) {
                    if (o && K(e).is(n)) break;
                    i.push(e)
                }
                return i
            },
            sibling: function(e, t) {
                for (var n = []; e; e = e.nextSibling) 1 === e.nodeType && e !== t && n.push(e);
                return n
            }
        }), K.fn.extend({
            has: function(e) {
                var t = K(e, this),
                    n = t.length;
                return this.filter(function() {
                    for (var e = 0; e < n; e++) if (K.contains(this, t[e])) return !0
                })
            },
            closest: function(e, t) {
                for (var n, i = 0, o = this.length, r = [], a = re.test(e) || "string" != typeof e ? K(e, t || this.context) : 0; i < o; i++) for (n = this[i]; n && n !== t; n = n.parentNode) if (n.nodeType < 11 && (a ? -1 < a.index(n) : 1 === n.nodeType && K.find.matchesSelector(n, e))) {
                    r.push(n);
                    break
                }
                return this.pushStack(1 < r.length ? K.unique(r) : r)
            },
            index: function(e) {
                return e ? "string" == typeof e ? U.call(K(e), this[0]) : U.call(this, e.jquery ? e[0] : e) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1
            },
            add: function(e, t) {
                return this.pushStack(K.unique(K.merge(this.get(), K(e, t))))
            },
            addBack: function(e) {
                return this.add(null == e ? this.prevObject : this.prevObject.filter(e))
            }
        }), K.each({
            parent: function(e) {
                var t = e.parentNode;
                return t && 11 !== t.nodeType ? t : null
            },
            parents: function(e) {
                return K.dir(e, "parentNode")
            },
            parentsUntil: function(e, t, n) {
                return K.dir(e, "parentNode", n)
            },
            next: function(e) {
                return n(e, "nextSibling")
            },
            prev: function(e) {
                return n(e, "previousSibling")
            },
            nextAll: function(e) {
                return K.dir(e, "nextSibling")
            },
            prevAll: function(e) {
                return K.dir(e, "previousSibling")
            },
            nextUntil: function(e, t, n) {
                return K.dir(e, "nextSibling", n)
            },
            prevUntil: function(e, t, n) {
                return K.dir(e, "previousSibling", n)
            },
            siblings: function(e) {
                return K.sibling((e.parentNode || {}).firstChild, e)
            },
            children: function(e) {
                return K.sibling(e.firstChild)
            },
            contents: function(e) {
                return e.contentDocument || K.merge([], e.childNodes)
            }
        }, function(i, o) {
            K.fn[i] = function(e, t) {
                var n = K.map(this, o, e);
                return "Until" !== i.slice(-5) && (t = e), t && "string" == typeof t && (n = K.filter(t, n)), 1 < this.length && (de[i] || K.unique(n), ue.test(i) && n.reverse()), this.pushStack(n)
            }
        });
        var fe, he = /\S+/g,
            pe = {};
        K.Callbacks = function(o) {
            o = "string" == typeof o ? pe[o] || f(o) : K.extend({}, o);
            var t, n, r, a, s, i, l = [],
                c = !o.once && [],
                u = function(e) {
                    for (t = o.memory && e, n = !0, i = a || 0, a = 0, s = l.length, r = !0; l && i < s; i++) if (!1 === l[i].apply(e[0], e[1]) && o.stopOnFalse) {
                        t = !1;
                        break
                    }
                    r = !1, l && (c ? c.length && u(c.shift()) : t ? l = [] : d.disable())
                },
                d = {
                    add: function() {
                        if (l) {
                            var e = l.length;
                            !
                                function i(e) {
                                    K.each(e, function(e, t) {
                                        var n = K.type(t);
                                        "function" === n ? o.unique && d.has(t) || l.push(t) : t && t.length && "string" !== n && i(t)
                                    })
                                }(arguments), r ? s = l.length : t && (a = e, u(t))
                        }
                        return this
                    },
                    remove: function() {
                        return l && K.each(arguments, function(e, t) {
                            for (var n; - 1 < (n = K.inArray(t, l, n));) l.splice(n, 1), r && (n <= s && s--, n <= i && i--)
                        }), this
                    },
                    has: function(e) {
                        return e ? -1 < K.inArray(e, l) : !(!l || !l.length)
                    },
                    empty: function() {
                        return l = [], s = 0, this
                    },
                    disable: function() {
                        return l = c = t = undefined, this
                    },
                    disabled: function() {
                        return !l
                    },
                    lock: function() {
                        return c = undefined, t || d.disable(), this
                    },
                    locked: function() {
                        return !c
                    },
                    fireWith: function(e, t) {
                        return !l || n && !c || (t = [e, (t = t || []).slice ? t.slice() : t], r ? c.push(t) : u(t)), this
                    },
                    fire: function() {
                        return d.fireWith(this, arguments), this
                    },
                    fired: function() {
                        return !!n
                    }
                };
            return d
        }, K.extend({
            Deferred: function(e) {
                var r = [
                        ["resolve", "done", K.Callbacks("once memory"), "resolved"],
                        ["reject", "fail", K.Callbacks("once memory"), "rejected"],
                        ["notify", "progress", K.Callbacks("memory")]
                    ],
                    o = "pending",
                    a = {
                        state: function() {
                            return o
                        },
                        always: function() {
                            return s.done(arguments).fail(arguments), this
                        },
                        then: function() {
                            var o = arguments;
                            return K.Deferred(function(i) {
                                K.each(r, function(e, t) {
                                    var n = K.isFunction(o[e]) && o[e];
                                    s[t[1]](function() {
                                        var e = n && n.apply(this, arguments);
                                        e && K.isFunction(e.promise) ? e.promise().done(i.resolve).fail(i.reject).progress(i.notify) : i[t[0] + "With"](this === a ? i.promise() : this, n ? [e] : arguments)
                                    })
                                }), o = null
                            }).promise()
                        },
                        promise: function(e) {
                            return null != e ? K.extend(e, a) : a
                        }
                    },
                    s = {};
                return a.pipe = a.then, K.each(r, function(e, t) {
                    var n = t[2],
                        i = t[3];
                    a[t[1]] = n.add, i && n.add(function() {
                        o = i
                    }, r[1 ^ e][2].disable, r[2][2].lock), s[t[0]] = function() {
                        return s[t[0] + "With"](this === s ? a : this, arguments), this
                    }, s[t[0] + "With"] = n.fireWith
                }), a.promise(s), e && e.call(s, s), s
            },
            when: function(e) {
                var o, t, n, i = 0,
                    r = B.call(arguments),
                    a = r.length,
                    s = 1 !== a || e && K.isFunction(e.promise) ? a : 0,
                    l = 1 === s ? e : K.Deferred(),
                    c = function(t, n, i) {
                        return function(e) {
                            n[t] = this, i[t] = 1 < arguments.length ? B.call(arguments) : e, i === o ? l.notifyWith(n, i) : --s || l.resolveWith(n, i)
                        }
                    };
                if (1 < a) for (o = new Array(a), t = new Array(a), n = new Array(a); i < a; i++) r[i] && K.isFunction(r[i].promise) ? r[i].promise().done(c(i, n, r)).fail(l.reject).progress(c(i, t, o)) : --s;
                return s || l.resolveWith(n, r), l.promise()
            }
        }), K.fn.ready = function(e) {
            return K.ready.promise().done(e), this
        }, K.extend({
            isReady: !1,
            readyWait: 1,
            holdReady: function(e) {
                e ? K.readyWait++ : K.ready(!0)
            },
            ready: function(e) {
                (!0 === e ? --K.readyWait : K.isReady) || (K.isReady = !0) !== e && 0 < --K.readyWait || (fe.resolveWith(Z, [K]), K.fn.triggerHandler && (K(Z).triggerHandler("ready"), K(Z).off("ready")))
            }
        }), K.ready.promise = function(e) {
            return fe || (fe = K.Deferred(), "complete" === Z.readyState ? setTimeout(K.ready) : (Z.addEventListener("DOMContentLoaded", i, !1), p.addEventListener("load", i, !1))), fe.promise(e)
        }, K.ready.promise();
        var me = K.access = function(e, t, n, i, o, r, a) {
            var s = 0,
                l = e.length,
                c = null == n;
            if ("object" === K.type(n)) for (s in o = !0, n) K.access(e, t, s, n[s], !0, r, a);
            else if (i !== undefined && (o = !0, K.isFunction(i) || (a = !0), c && (a ? (t.call(e, i), t = null) : (c = t, t = function(e, t, n) {
                    return c.call(K(e), n)
                })), t)) for (; s < l; s++) t(e[s], n, a ? i : i.call(e[s], s, t(e[s], n)));
            return o ? e : c ? t.call(e) : l ? t(e[0], n) : r
        };
        K.acceptData = function(e) {
            return 1 === e.nodeType || 9 === e.nodeType || !+e.nodeType
        }, o.uid = 1, o.accepts = K.acceptData, o.prototype = {
            key: function(e) {
                if (!o.accepts(e)) return 0;
                var t = {},
                    n = e[this.expando];
                if (!n) {
                    n = o.uid++;
                    try {
                        t[this.expando] = {
                            value: n
                        }, Object.defineProperties(e, t)
                    } catch (i) {
                        t[this.expando] = n, K.extend(e, t)
                    }
                }
                return this.cache[n] || (this.cache[n] = {}), n
            },
            set: function(e, t, n) {
                var i, o = this.key(e),
                    r = this.cache[o];
                if ("string" == typeof t) r[t] = n;
                else if (K.isEmptyObject(r)) K.extend(this.cache[o], t);
                else for (i in t) r[i] = t[i];
                return r
            },
            get: function(e, t) {
                var n = this.cache[this.key(e)];
                return t === undefined ? n : n[t]
            },
            access: function(e, t, n) {
                var i;
                return t === undefined || t && "string" == typeof t && n === undefined ? (i = this.get(e, t)) !== undefined ? i : this.get(e, K.camelCase(t)) : (this.set(e, t, n), n !== undefined ? n : t)
            },
            remove: function(e, t) {
                var n, i, o, r = this.key(e),
                    a = this.cache[r];
                if (t === undefined) this.cache[r] = {};
                else {
                    K.isArray(t) ? i = t.concat(t.map(K.camelCase)) : (o = K.camelCase(t), i = t in a ? [t, o] : (i = o) in a ? [i] : i.match(he) || []), n = i.length;
                    for (; n--;) delete a[i[n]]
                }
            },
            hasData: function(e) {
                return !K.isEmptyObject(this.cache[e[this.expando]] || {})
            },
            discard: function(e) {
                e[this.expando] && delete this.cache[e[this.expando]]
            }
        };
        var _e = new o,
            ge = new o,
            ve = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
            ye = /([A-Z])/g;
        K.extend({
            hasData: function(e) {
                return ge.hasData(e) || _e.hasData(e)
            },
            data: function(e, t, n) {
                return ge.access(e, t, n)
            },
            removeData: function(e, t) {
                ge.remove(e, t)
            },
            _data: function(e, t, n) {
                return _e.access(e, t, n)
            },
            _removeData: function(e, t) {
                _e.remove(e, t)
            }
        }), K.fn.extend({
            data: function(i, e) {
                var t, n, o, r = this[0],
                    a = r && r.attributes;
                if (i === undefined) {
                    if (this.length && (o = ge.get(r), 1 === r.nodeType && !_e.get(r, "hasDataAttrs"))) {
                        for (t = a.length; t--;) a[t] && 0 === (n = a[t].name).indexOf("data-") && (n = K.camelCase(n.slice(5)), l(r, n, o[n]));
                        _e.set(r, "hasDataAttrs", !0)
                    }
                    return o
                }
                return "object" == typeof i ? this.each(function() {
                    ge.set(this, i)
                }) : me(this, function(t) {
                    var e, n = K.camelCase(i);
                    if (r && t === undefined) return (e = ge.get(r, i)) !== undefined ? e : (e = ge.get(r, n)) !== undefined ? e : (e = l(r, n, undefined)) !== undefined ? e : void 0;
                    this.each(function() {
                        var e = ge.get(this, n);
                        ge.set(this, n, t), -1 !== i.indexOf("-") && e !== undefined && ge.set(this, i, t)
                    })
                }, null, e, 1 < arguments.length, null, !0)
            },
            removeData: function(e) {
                return this.each(function() {
                    ge.remove(this, e)
                })
            }
        }), K.extend({
            queue: function(e, t, n) {
                var i;
                if (e) return t = (t || "fx") + "queue", i = _e.get(e, t), n && (!i || K.isArray(n) ? i = _e.access(e, t, K.makeArray(n)) : i.push(n)), i || []
            },
            dequeue: function(e, t) {
                t = t || "fx";
                var n = K.queue(e, t),
                    i = n.length,
                    o = n.shift(),
                    r = K._queueHooks(e, t),
                    a = function() {
                        K.dequeue(e, t)
                    };
                "inprogress" === o && (o = n.shift(), i--), o && ("fx" === t && n.unshift("inprogress"), delete r.stop, o.call(e, a, r)), !i && r && r.empty.fire()
            },
            _queueHooks: function(e, t) {
                var n = t + "queueHooks";
                return _e.get(e, n) || _e.access(e, n, {
                        empty: K.Callbacks("once memory").add(function() {
                            _e.remove(e, [t + "queue", n])
                        })
                    })
            }
        }), K.fn.extend({
            queue: function(t, n) {
                var e = 2;
                return "string" != typeof t && (n = t, t = "fx", e--), arguments.length < e ? K.queue(this[0], t) : n === undefined ? this : this.each(function() {
                    var e = K.queue(this, t, n);
                    K._queueHooks(this, t), "fx" === t && "inprogress" !== e[0] && K.dequeue(this, t)
                })
            },
            dequeue: function(e) {
                return this.each(function() {
                    K.dequeue(this, e)
                })
            },
            clearQueue: function(e) {
                return this.queue(e || "fx", [])
            },
            promise: function(e, t) {
                var n, i = 1,
                    o = K.Deferred(),
                    r = this,
                    a = this.length,
                    s = function() {
                        --i || o.resolveWith(r, [r])
                    };
                for ("string" != typeof e && (t = e, e = undefined), e = e || "fx"; a--;)(n = _e.get(r[a], e + "queueHooks")) && n.empty && (i++, n.empty.add(s));
                return s(), o.promise(t)
            }
        });
        var be, we, xe = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
            ke = ["Top", "Right", "Bottom", "Left"],
            Ce = function(e, t) {
                return e = t || e, "none" === K.css(e, "display") || !K.contains(e.ownerDocument, e)
            },
            Te = /^(?:checkbox|radio)$/i;
        be = Z.createDocumentFragment().appendChild(Z.createElement("div")), (we = Z.createElement("input")).setAttribute("type", "radio"), we.setAttribute("checked", "checked"), we.setAttribute("name", "t"), be.appendChild(we), X.checkClone = be.cloneNode(!0).cloneNode(!0).lastChild.checked, be.innerHTML = "<textarea>x</textarea>", X.noCloneChecked = !! be.cloneNode(!0).lastChild.defaultValue;
        var Se = typeof undefined;
        X.focusinBubbles = "onfocusin" in p;
        var De = /^key/,
            Ee = /^(?:mouse|pointer|contextmenu)|click/,
            Ie = /^(?:focusinfocus|focusoutblur)$/,
            Ne = /^([^.]*)(?:\.(.+)|)$/;
        K.event = {
            global: {},
            add: function(t, e, n, i, o) {
                var r, a, s, l, c, u, d, f, h, p, m, _ = _e.get(t);
                if (_) for (n.handler && (n = (r = n).handler, o = r.selector), n.guid || (n.guid = K.guid++), (l = _.events) || (l = _.events = {}), (a = _.handle) || (a = _.handle = function(e) {
                    return typeof K !== Se && K.event.triggered !== e.type ? K.event.dispatch.apply(t, arguments) : undefined
                }), c = (e = (e || "").match(he) || [""]).length; c--;) h = m = (s = Ne.exec(e[c]) || [])[1], p = (s[2] || "").split(".").sort(), h && (d = K.event.special[h] || {}, h = (o ? d.delegateType : d.bindType) || h, d = K.event.special[h] || {}, u = K.extend({
                    type: h,
                    origType: m,
                    data: i,
                    handler: n,
                    guid: n.guid,
                    selector: o,
                    needsContext: o && K.expr.match.needsContext.test(o),
                    namespace: p.join(".")
                }, r), (f = l[h]) || ((f = l[h] = []).delegateCount = 0, d.setup && !1 !== d.setup.call(t, i, p, a) || t.addEventListener && t.addEventListener(h, a, !1)), d.add && (d.add.call(t, u), u.handler.guid || (u.handler.guid = n.guid)), o ? f.splice(f.delegateCount++, 0, u) : f.push(u), K.event.global[h] = !0)
            },
            remove: function(e, t, n, i, o) {
                var r, a, s, l, c, u, d, f, h, p, m, _ = _e.hasData(e) && _e.get(e);
                if (_ && (l = _.events)) {
                    for (c = (t = (t || "").match(he) || [""]).length; c--;) if (h = m = (s = Ne.exec(t[c]) || [])[1], p = (s[2] || "").split(".").sort(), h) {
                        for (d = K.event.special[h] || {}, f = l[h = (i ? d.delegateType : d.bindType) || h] || [], s = s[2] && new RegExp("(^|\\.)" + p.join("\\.(?:.*\\.|)") + "(\\.|$)"), a = r = f.length; r--;) u = f[r], !o && m !== u.origType || n && n.guid !== u.guid || s && !s.test(u.namespace) || i && i !== u.selector && ("**" !== i || !u.selector) || (f.splice(r, 1), u.selector && f.delegateCount--, d.remove && d.remove.call(e, u));
                        a && !f.length && (d.teardown && !1 !== d.teardown.call(e, p, _.handle) || K.removeEvent(e, h, _.handle), delete l[h])
                    } else for (h in l) K.event.remove(e, h + t[c], n, i, !0);
                    K.isEmptyObject(l) && (delete _.handle, _e.remove(e, "events"))
                }
            },
            trigger: function(e, t, n, i) {
                var o, r, a, s, l, c, u, d = [n || Z],
                    f = Q.call(e, "type") ? e.type : e,
                    h = Q.call(e, "namespace") ? e.namespace.split(".") : [];
                if (r = a = n = n || Z, 3 !== n.nodeType && 8 !== n.nodeType && !Ie.test(f + K.event.triggered) && (0 <= f.indexOf(".") && (f = (h = f.split(".")).shift(), h.sort()), l = f.indexOf(":") < 0 && "on" + f, (e = e[K.expando] ? e : new K.Event(f, "object" == typeof e && e)).isTrigger = i ? 2 : 3, e.namespace = h.join("."), e.namespace_re = e.namespace ? new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, e.result = undefined, e.target || (e.target = n), t = null == t ? [e] : K.makeArray(t, [e]), u = K.event.special[f] || {}, i || !u.trigger || !1 !== u.trigger.apply(n, t))) {
                    if (!i && !u.noBubble && !K.isWindow(n)) {
                        for (s = u.delegateType || f, Ie.test(s + f) || (r = r.parentNode); r; r = r.parentNode) d.push(r), a = r;
                        a === (n.ownerDocument || Z) && d.push(a.defaultView || a.parentWindow || p)
                    }
                    for (o = 0;
                         (r = d[o++]) && !e.isPropagationStopped();) e.type = 1 < o ? s : u.bindType || f, (c = (_e.get(r, "events") || {})[e.type] && _e.get(r, "handle")) && c.apply(r, t), (c = l && r[l]) && c.apply && K.acceptData(r) && (e.result = c.apply(r, t), !1 === e.result && e.preventDefault());
                    return e.type = f, i || e.isDefaultPrevented() || u._default && !1 !== u._default.apply(d.pop(), t) || !K.acceptData(n) || l && K.isFunction(n[f]) && !K.isWindow(n) && ((a = n[l]) && (n[l] = null), n[K.event.triggered = f](), K.event.triggered = undefined, a && (n[l] = a)), e.result
                }
            },
            dispatch: function(e) {
                e = K.event.fix(e);
                var t, n, i, o, r, a = [],
                    s = B.call(arguments),
                    l = (_e.get(this, "events") || {})[e.type] || [],
                    c = K.event.special[e.type] || {};
                if ((s[0] = e).delegateTarget = this, !c.preDispatch || !1 !== c.preDispatch.call(this, e)) {
                    for (a = K.event.handlers.call(this, e, l), t = 0;
                         (o = a[t++]) && !e.isPropagationStopped();) for (e.currentTarget = o.elem, n = 0;
                                                                          (r = o.handlers[n++]) && !e.isImmediatePropagationStopped();) e.namespace_re && !e.namespace_re.test(r.namespace) || (e.handleObj = r, e.data = r.data, (i = ((K.event.special[r.origType] || {}).handle || r.handler).apply(o.elem, s)) !== undefined && !1 === (e.result = i) && (e.preventDefault(), e.stopPropagation()));
                    return c.postDispatch && c.postDispatch.call(this, e), e.result
                }
            },
            handlers: function(e, t) {
                var n, i, o, r, a = [],
                    s = t.delegateCount,
                    l = e.target;
                if (s && l.nodeType && (!e.button || "click" !== e.type)) for (; l !== this; l = l.parentNode || this) if (!0 !== l.disabled || "click" !== e.type) {
                    for (i = [], n = 0; n < s; n++) i[o = (r = t[n]).selector + " "] === undefined && (i[o] = r.needsContext ? 0 <= K(o, this).index(l) : K.find(o, this, null, [l]).length), i[o] && i.push(r);
                    i.length && a.push({
                        elem: l,
                        handlers: i
                    })
                }
                return s < t.length && a.push({
                    elem: this,
                    handlers: t.slice(s)
                }), a
            },
            props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
            fixHooks: {},
            keyHooks: {
                props: "char charCode key keyCode".split(" "),
                filter: function(e, t) {
                    return null == e.which && (e.which = null != t.charCode ? t.charCode : t.keyCode), e
                }
            },
            mouseHooks: {
                props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
                filter: function(e, t) {
                    var n, i, o, r = t.button;
                    return null == e.pageX && null != t.clientX && (i = (n = e.target.ownerDocument || Z).documentElement, o = n.body, e.pageX = t.clientX + (i && i.scrollLeft || o && o.scrollLeft || 0) - (i && i.clientLeft || o && o.clientLeft || 0), e.pageY = t.clientY + (i && i.scrollTop || o && o.scrollTop || 0) - (i && i.clientTop || o && o.clientTop || 0)), e.which || r === undefined || (e.which = 1 & r ? 1 : 2 & r ? 3 : 4 & r ? 2 : 0), e
                }
            },
            fix: function(e) {
                if (e[K.expando]) return e;
                var t, n, i, o = e.type,
                    r = e,
                    a = this.fixHooks[o];
                for (a || (this.fixHooks[o] = a = Ee.test(o) ? this.mouseHooks : De.test(o) ? this.keyHooks : {}), i = a.props ? this.props.concat(a.props) : this.props, e = new K.Event(r), t = i.length; t--;) e[n = i[t]] = r[n];
                return e.target || (e.target = Z), 3 === e.target.nodeType && (e.target = e.target.parentNode), a.filter ? a.filter(e, r) : e
            },
            special: {
                load: {
                    noBubble: !0
                },
                focus: {
                    trigger: function() {
                        if (this !== a() && this.focus) return this.focus(), !1
                    },
                    delegateType: "focusin"
                },
                blur: {
                    trigger: function() {
                        if (this === a() && this.blur) return this.blur(), !1
                    },
                    delegateType: "focusout"
                },
                click: {
                    trigger: function() {
                        if ("checkbox" === this.type && this.click && K.nodeName(this, "input")) return this.click(), !1
                    },
                    _default: function(e) {
                        return K.nodeName(e.target, "a")
                    }
                },
                beforeunload: {
                    postDispatch: function(e) {
                        e.result !== undefined && e.originalEvent && (e.originalEvent.returnValue = e.result)
                    }
                }
            },
            simulate: function(e, t, n, i) {
                var o = K.extend(new K.Event, n, {
                    type: e,
                    isSimulated: !0,
                    originalEvent: {}
                });
                i ? K.event.trigger(o, null, t) : K.event.dispatch.call(t, o), o.isDefaultPrevented() && n.preventDefault()
            }
        }, K.removeEvent = function(e, t, n) {
            e.removeEventListener && e.removeEventListener(t, n, !1)
        }, K.Event = function(e, t) {
            if (!(this instanceof K.Event)) return new K.Event(e, t);
            e && e.type ? (this.originalEvent = e, this.type = e.type, this.isDefaultPrevented = e.defaultPrevented || e.defaultPrevented === undefined && !1 === e.returnValue ? r : c) : this.type = e, t && K.extend(this, t), this.timeStamp = e && e.timeStamp || K.now(), this[K.expando] = !0
        }, K.Event.prototype = {
            isDefaultPrevented: c,
            isPropagationStopped: c,
            isImmediatePropagationStopped: c,
            preventDefault: function() {
                var e = this.originalEvent;
                this.isDefaultPrevented = r, e && e.preventDefault && e.preventDefault()
            },
            stopPropagation: function() {
                var e = this.originalEvent;
                this.isPropagationStopped = r, e && e.stopPropagation && e.stopPropagation()
            },
            stopImmediatePropagation: function() {
                var e = this.originalEvent;
                this.isImmediatePropagationStopped = r, e && e.stopImmediatePropagation && e.stopImmediatePropagation(), this.stopPropagation()
            }
        }, K.each({
            mouseenter: "mouseover",
            mouseleave: "mouseout",
            pointerenter: "pointerover",
            pointerleave: "pointerout"
        }, function(e, r) {
            K.event.special[e] = {
                delegateType: r,
                bindType: r,
                handle: function(e) {
                    var t, n = this,
                        i = e.relatedTarget,
                        o = e.handleObj;
                    return i && (i === n || K.contains(n, i)) || (e.type = o.origType, t = o.handler.apply(this, arguments), e.type = r), t
                }
            }
        }), X.focusinBubbles || K.each({
            focus: "focusin",
            blur: "focusout"
        }, function(n, i) {
            var o = function(e) {
                K.event.simulate(i, e.target, K.event.fix(e), !0)
            };
            K.event.special[i] = {
                setup: function() {
                    var e = this.ownerDocument || this,
                        t = _e.access(e, i);
                    t || e.addEventListener(n, o, !0), _e.access(e, i, (t || 0) + 1)
                },
                teardown: function() {
                    var e = this.ownerDocument || this,
                        t = _e.access(e, i) - 1;
                    t ? _e.access(e, i, t) : (e.removeEventListener(n, o, !0), _e.remove(e, i))
                }
            }
        }), K.fn.extend({
            on: function(e, t, n, i, o) {
                var r, a;
                if ("object" == typeof e) {
                    for (a in "string" != typeof t && (n = n || t, t = undefined), e) this.on(a, t, n, e[a], o);
                    return this
                }
                if (null == n && null == i ? (i = t, n = t = undefined) : null == i && ("string" == typeof t ? (i = n, n = undefined) : (i = n, n = t, t = undefined)), !1 === i) i = c;
                else if (!i) return this;
                return 1 === o && (r = i, (i = function(e) {
                    return K().off(e), r.apply(this, arguments)
                }).guid = r.guid || (r.guid = K.guid++)), this.each(function() {
                    K.event.add(this, e, i, n, t)
                })
            },
            one: function(e, t, n, i) {
                return this.on(e, t, n, i, 1)
            },
            off: function(e, t, n) {
                var i, o;
                if (e && e.preventDefault && e.handleObj) return i = e.handleObj, K(e.delegateTarget).off(i.namespace ? i.origType + "." + i.namespace : i.origType, i.selector, i.handler), this;
                if ("object" == typeof e) {
                    for (o in e) this.off(o, t, e[o]);
                    return this
                }
                return !1 !== t && "function" != typeof t || (n = t, t = undefined), !1 === n && (n = c), this.each(function() {
                    K.event.remove(this, e, n, t)
                })
            },
            trigger: function(e, t) {
                return this.each(function() {
                    K.event.trigger(e, t, this)
                })
            },
            triggerHandler: function(e, t) {
                var n = this[0];
                if (n) return K.event.trigger(e, t, n, !0)
            }
        });
        var Me = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
            Pe = /<([\w:]+)/,
            $e = /<|&#?\w+;/,
            Ae = /<(?:script|style|link)/i,
            je = /checked\s*(?:[^=]|=\s*.checked.)/i,
            Le = /^$|\/(?:java|ecma)script/i,
            qe = /^true\/(.*)/,
            Oe = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
            Re = {
                option: [1, "<select multiple='multiple'>", "</select>"],
                thead: [1, "<table>", "</table>"],
                col: [2, "<table><colgroup>", "</colgroup></table>"],
                tr: [2, "<table><tbody>", "</tbody></table>"],
                td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
                _default: [0, "", ""]
            };
        Re.optgroup = Re.option, Re.tbody = Re.tfoot = Re.colgroup = Re.caption = Re.thead, Re.th = Re.td, K.extend({
            clone: function(e, t, n) {
                var i, o, r, a, s = e.cloneNode(!0),
                    l = K.contains(e.ownerDocument, e);
                if (!(X.noCloneChecked || 1 !== e.nodeType && 11 !== e.nodeType || K.isXMLDoc(e))) for (a = v(s), i = 0, o = (r = v(e)).length; i < o; i++) h(r[i], a[i]);
                if (t) if (n) for (r = r || v(e), a = a || v(s), i = 0, o = r.length; i < o; i++) d(r[i], a[i]);
                else d(e, s);
                return 0 < (a = v(s, "script")).length && g(a, !l && v(e, "script")), s
            },
            buildFragment: function(e, t, n, i) {
                for (var o, r, a, s, l, c, u = t.createDocumentFragment(), d = [], f = 0, h = e.length; f < h; f++) if ((o = e[f]) || 0 === o) if ("object" === K.type(o)) K.merge(d, o.nodeType ? [o] : o);
                else if ($e.test(o)) {
                    for (r = r || u.appendChild(t.createElement("div")), a = (Pe.exec(o) || ["", ""])[1].toLowerCase(), s = Re[a] || Re._default, r.innerHTML = s[1] + o.replace(Me, "<$1></$2>") + s[2], c = s[0]; c--;) r = r.lastChild;
                    K.merge(d, r.childNodes), (r = u.firstChild).textContent = ""
                } else d.push(t.createTextNode(o));
                for (u.textContent = "", f = 0; o = d[f++];) if ((!i || -1 === K.inArray(o, i)) && (l = K.contains(o.ownerDocument, o), r = v(u.appendChild(o), "script"), l && g(r), n)) for (c = 0; o = r[c++];) Le.test(o.type || "") && n.push(o);
                return u
            },
            cleanData: function(e) {
                for (var t, n, i, o, r = K.event.special, a = 0;
                     (n = e[a]) !== undefined; a++) {
                    if (K.acceptData(n) && (o = n[_e.expando]) && (t = _e.cache[o])) {
                        if (t.events) for (i in t.events) r[i] ? K.event.remove(n, i) : K.removeEvent(n, i, t.handle);
                        _e.cache[o] && delete _e.cache[o]
                    }
                    delete ge.cache[n[ge.expando]]
                }
            }
        }), K.fn.extend({
            text: function(e) {
                return me(this, function(e) {
                    return e === undefined ? K.text(this) : this.empty().each(function() {
                        1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || (this.textContent = e)
                    })
                }, null, e, arguments.length)
            },
            append: function() {
                return this.domManip(arguments, function(e) {
                    1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || u(this, e).appendChild(e)
                })
            },
            prepend: function() {
                return this.domManip(arguments, function(e) {
                    if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
                        var t = u(this, e);
                        t.insertBefore(e, t.firstChild)
                    }
                })
            },
            before: function() {
                return this.domManip(arguments, function(e) {
                    this.parentNode && this.parentNode.insertBefore(e, this)
                })
            },
            after: function() {
                return this.domManip(arguments, function(e) {
                    this.parentNode && this.parentNode.insertBefore(e, this.nextSibling)
                })
            },
            remove: function(e, t) {
                for (var n, i = e ? K.filter(e, this) : this, o = 0; null != (n = i[o]); o++) t || 1 !== n.nodeType || K.cleanData(v(n)), n.parentNode && (t && K.contains(n.ownerDocument, n) && g(v(n, "script")), n.parentNode.removeChild(n));
                return this
            },
            empty: function() {
                for (var e, t = 0; null != (e = this[t]); t++) 1 === e.nodeType && (K.cleanData(v(e, !1)), e.textContent = "");
                return this
            },
            clone: function(e, t) {
                return e = null != e && e, t = null == t ? e : t, this.map(function() {
                    return K.clone(this, e, t)
                })
            },
            html: function(e) {
                return me(this, function(e) {
                    var t = this[0] || {},
                        n = 0,
                        i = this.length;
                    if (e === undefined && 1 === t.nodeType) return t.innerHTML;
                    if ("string" == typeof e && !Ae.test(e) && !Re[(Pe.exec(e) || ["", ""])[1].toLowerCase()]) {
                        e = e.replace(Me, "<$1></$2>");
                        try {
                            for (; n < i; n++) 1 === (t = this[n] || {}).nodeType && (K.cleanData(v(t, !1)), t.innerHTML = e);
                            t = 0
                        } catch (o) {}
                    }
                    t && this.empty().append(e)
                }, null, e, arguments.length)
            },
            replaceWith: function(e) {
                var t = e;
                return this.domManip(arguments, function(e) {
                    t = this.parentNode, K.cleanData(v(this)), t && t.replaceChild(e, this)
                }), t && (t.length || t.nodeType) ? this : this.remove()
            },
            detach: function(e) {
                return this.remove(e, !0)
            },
            domManip: function(n, i) {
                n = G.apply([], n);
                var e, t, o, r, a, s, l = 0,
                    c = this.length,
                    u = this,
                    d = c - 1,
                    f = n[0],
                    h = K.isFunction(f);
                if (h || 1 < c && "string" == typeof f && !X.checkClone && je.test(f)) return this.each(function(e) {
                    var t = u.eq(e);
                    h && (n[0] = f.call(this, e, t.html())), t.domManip(n, i)
                });
                if (c && (t = (e = K.buildFragment(n, this[0].ownerDocument, !1, this)).firstChild, 1 === e.childNodes.length && (e = t), t)) {
                    for (r = (o = K.map(v(e, "script"), m)).length; l < c; l++) a = e, l !== d && (a = K.clone(a, !0, !0), r && K.merge(o, v(a, "script"))), i.call(this[l], a, l);
                    if (r) for (s = o[o.length - 1].ownerDocument, K.map(o, _), l = 0; l < r; l++) a = o[l], Le.test(a.type || "") && !_e.access(a, "globalEval") && K.contains(s, a) && (a.src ? K._evalUrl && K._evalUrl(a.src) : K.globalEval(a.textContent.replace(Oe, "")))
                }
                return this
            }
        }), K.each({
            appendTo: "append",
            prependTo: "prepend",
            insertBefore: "before",
            insertAfter: "after",
            replaceAll: "replaceWith"
        }, function(e, a) {
            K.fn[e] = function(e) {
                for (var t, n = [], i = K(e), o = i.length - 1, r = 0; r <= o; r++) t = r === o ? this : this.clone(!0), K(i[r])[a](t), W.apply(n, t.get());
                return this.pushStack(n)
            }
        });
        var ze, Fe = {},
            He = /^margin/,
            Be = new RegExp("^(" + xe + ")(?!px)[a-z%]+$", "i"),
            Ge = function(e) {
                return e.ownerDocument.defaultView.opener ? e.ownerDocument.defaultView.getComputedStyle(e, null) : p.getComputedStyle(e, null)
            };
        !
            function() {
                function e() {
                    r.style.cssText = "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute", r.innerHTML = "", i.appendChild(o);
                    var e = p.getComputedStyle(r, null);
                    t = "1%" !== e.top, n = "4px" === e.width, i.removeChild(o)
                }
                var t, n, i = Z.documentElement,
                    o = Z.createElement("div"),
                    r = Z.createElement("div");
                r.style && (r.style.backgroundClip = "content-box", r.cloneNode(!0).style.backgroundClip = "", X.clearCloneStyle = "content-box" === r.style.backgroundClip, o.style.cssText = "border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute", o.appendChild(r), p.getComputedStyle && K.extend(X, {
                    pixelPosition: function() {
                        return e(), t
                    },
                    boxSizingReliable: function() {
                        return null == n && e(), n
                    },
                    reliableMarginRight: function() {
                        var e, t = r.appendChild(Z.createElement("div"));
                        return t.style.cssText = r.style.cssText = "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0", t.style.marginRight = t.style.width = "0", r.style.width = "1px", i.appendChild(o), e = !parseFloat(p.getComputedStyle(t, null).marginRight), i.removeChild(o), r.removeChild(t), e
                    }
                }))
            }(), K.swap = function(e, t, n, i) {
            var o, r, a = {};
            for (r in t) a[r] = e.style[r], e.style[r] = t[r];
            for (r in o = n.apply(e, i || []), t) e.style[r] = a[r];
            return o
        };
        var We = /^(none|table(?!-c[ea]).+)/,
            Ue = new RegExp("^(" + xe + ")(.*)$", "i"),
            Ve = new RegExp("^([+-])=(" + xe + ")", "i"),
            Ye = {
                position: "absolute",
                visibility: "hidden",
                display: "block"
            },
            Qe = {
                letterSpacing: "0",
                fontWeight: "400"
            },
            Xe = ["Webkit", "O", "Moz", "ms"];
        K.extend({
            cssHooks: {
                opacity: {
                    get: function(e, t) {
                        if (t) {
                            var n = w(e, "opacity");
                            return "" === n ? "1" : n
                        }
                    }
                }
            },
            cssNumber: {
                columnCount: !0,
                fillOpacity: !0,
                flexGrow: !0,
                flexShrink: !0,
                fontWeight: !0,
                lineHeight: !0,
                opacity: !0,
                order: !0,
                orphans: !0,
                widows: !0,
                zIndex: !0,
                zoom: !0
            },
            cssProps: {
                "float": "cssFloat"
            },
            style: function(e, t, n, i) {
                if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) {
                    var o, r, a, s = K.camelCase(t),
                        l = e.style;
                    if (t = K.cssProps[s] || (K.cssProps[s] = k(l, s)), a = K.cssHooks[t] || K.cssHooks[s], n === undefined) return a && "get" in a && (o = a.get(e, !1, i)) !== undefined ? o : l[t];
                    "string" === (r = typeof n) && (o = Ve.exec(n)) && (n = (o[1] + 1) * o[2] + parseFloat(K.css(e, t)), r = "number"), null != n && n == n && ("number" !== r || K.cssNumber[s] || (n += "px"), X.clearCloneStyle || "" !== n || 0 !== t.indexOf("background") || (l[t] = "inherit"), a && "set" in a && (n = a.set(e, n, i)) === undefined || (l[t] = n))
                }
            },
            css: function(e, t, n, i) {
                var o, r, a, s = K.camelCase(t);
                return t = K.cssProps[s] || (K.cssProps[s] = k(e.style, s)), (a = K.cssHooks[t] || K.cssHooks[s]) && "get" in a && (o = a.get(e, !0, n)), o === undefined && (o = w(e, t, i)), "normal" === o && t in Qe && (o = Qe[t]), "" === n || n ? (r = parseFloat(o), !0 === n || K.isNumeric(r) ? r || 0 : o) : o
            }
        }), K.each(["height", "width"], function(e, o) {
            K.cssHooks[o] = {
                get: function(e, t, n) {
                    if (t) return We.test(K.css(e, "display")) && 0 === e.offsetWidth ? K.swap(e, Ye, function() {
                        return S(e, o, n)
                    }) : S(e, o, n)
                },
                set: function(e, t, n) {
                    var i = n && Ge(e);
                    return C(e, t, n ? T(e, o, n, "border-box" === K.css(e, "boxSizing", !1, i), i) : 0)
                }
            }
        }), K.cssHooks.marginRight = x(X.reliableMarginRight, function(e, t) {
            if (t) return K.swap(e, {
                display: "inline-block"
            }, w, [e, "marginRight"])
        }), K.each({
            margin: "",
            padding: "",
            border: "Width"
        }, function(o, r) {
            K.cssHooks[o + r] = {
                expand: function(e) {
                    for (var t = 0, n = {}, i = "string" == typeof e ? e.split(" ") : [e]; t < 4; t++) n[o + ke[t] + r] = i[t] || i[t - 2] || i[0];
                    return n
                }
            }, He.test(o) || (K.cssHooks[o + r].set = C)
        }), K.fn.extend({
            css: function(e, t) {
                return me(this, function(e, t, n) {
                    var i, o, r = {},
                        a = 0;
                    if (K.isArray(t)) {
                        for (i = Ge(e), o = t.length; a < o; a++) r[t[a]] = K.css(e, t[a], !1, i);
                        return r
                    }
                    return n !== undefined ? K.style(e, t, n) : K.css(e, t)
                }, e, t, 1 < arguments.length)
            },
            show: function() {
                return D(this, !0)
            },
            hide: function() {
                return D(this)
            },
            toggle: function(e) {
                return "boolean" == typeof e ? e ? this.show() : this.hide() : this.each(function() {
                    Ce(this) ? K(this).show() : K(this).hide()
                })
            }
        }), (K.Tween = E).prototype = {
            constructor: E,
            init: function(e, t, n, i, o, r) {
                this.elem = e, this.prop = n, this.easing = o || "swing", this.options = t, this.start = this.now = this.cur(), this.end = i, this.unit = r || (K.cssNumber[n] ? "" : "px")
            },
            cur: function() {
                var e = E.propHooks[this.prop];
                return e && e.get ? e.get(this) : E.propHooks._default.get(this)
            },
            run: function(e) {
                var t, n = E.propHooks[this.prop];
                return this.options.duration ? this.pos = t = K.easing[this.easing](e, this.options.duration * e, 0, 1, this.options.duration) : this.pos = t = e, this.now = (this.end - this.start) * t + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), n && n.set ? n.set(this) : E.propHooks._default.set(this), this
            }
        }, E.prototype.init.prototype = E.prototype, E.propHooks = {
            _default: {
                get: function(e) {
                    var t;
                    return null == e.elem[e.prop] || e.elem.style && null != e.elem.style[e.prop] ? (t = K.css(e.elem, e.prop, "")) && "auto" !== t ? t : 0 : e.elem[e.prop]
                },
                set: function(e) {
                    K.fx.step[e.prop] ? K.fx.step[e.prop](e) : e.elem.style && (null != e.elem.style[K.cssProps[e.prop]] || K.cssHooks[e.prop]) ? K.style(e.elem, e.prop, e.now + e.unit) : e.elem[e.prop] = e.now
                }
            }
        }, E.propHooks.scrollTop = E.propHooks.scrollLeft = {
            set: function(e) {
                e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now)
            }
        }, K.easing = {
            linear: function(e) {
                return e
            },
            swing: function(e) {
                return .5 - Math.cos(e * Math.PI) / 2
            }
        }, K.fx = E.prototype.init, K.fx.step = {};
        var Ze, Je, Ke, et, tt, nt = /^(?:toggle|show|hide)$/,
            it = new RegExp("^(?:([+-])=|)(" + xe + ")([a-z%]*)$", "i"),
            ot = /queueHooks$/,
            rt = [P],
            at = {
                "*": [function(e, t) {
                    var n = this.createTween(e, t),
                        i = n.cur(),
                        o = it.exec(t),
                        r = o && o[3] || (K.cssNumber[e] ? "" : "px"),
                        a = (K.cssNumber[e] || "px" !== r && +i) && it.exec(K.css(n.elem, e)),
                        s = 1,
                        l = 20;
                    if (a && a[3] !== r) for (r = r || a[3], o = o || [], a = +i || 1; a /= s = s || ".5", K.style(n.elem, e, a + r), s !== (s = n.cur() / i) && 1 !== s && --l;);
                    return o && (a = n.start = +a || +i || 0, n.unit = r, n.end = o[1] ? a + (o[1] + 1) * o[2] : +o[2]), n
                }]
            };
        K.Animation = K.extend(A, {
            tweener: function(e, t) {
                K.isFunction(e) ? (t = e, e = ["*"]) : e = e.split(" ");
                for (var n, i = 0, o = e.length; i < o; i++) n = e[i], at[n] = at[n] || [], at[n].unshift(t)
            },
            prefilter: function(e, t) {
                t ? rt.unshift(e) : rt.push(e)
            }
        }), K.speed = function(e, t, n) {
            var i = e && "object" == typeof e ? K.extend({}, e) : {
                complete: n || !n && t || K.isFunction(e) && e,
                duration: e,
                easing: n && t || t && !K.isFunction(t) && t
            };
            return i.duration = K.fx.off ? 0 : "number" == typeof i.duration ? i.duration : i.duration in K.fx.speeds ? K.fx.speeds[i.duration] : K.fx.speeds._default, null != i.queue && !0 !== i.queue || (i.queue = "fx"), i.old = i.complete, i.complete = function() {
                K.isFunction(i.old) && i.old.call(this), i.queue && K.dequeue(this, i.queue)
            }, i
        }, K.fn.extend({
            fadeTo: function(e, t, n, i) {
                return this.filter(Ce).css("opacity", 0).show().end().animate({
                    opacity: t
                }, e, n, i)
            },
            animate: function(t, e, n, i) {
                var o = K.isEmptyObject(t),
                    r = K.speed(e, n, i),
                    a = function() {
                        var e = A(this, K.extend({}, t), r);
                        (o || _e.get(this, "finish")) && e.stop(!0)
                    };
                return a.finish = a, o || !1 === r.queue ? this.each(a) : this.queue(r.queue, a)
            },
            stop: function(o, e, r) {
                var a = function(e) {
                    var t = e.stop;
                    delete e.stop, t(r)
                };
                return "string" != typeof o && (r = e, e = o, o = undefined), e && !1 !== o && this.queue(o || "fx", []), this.each(function() {
                    var e = !0,
                        t = null != o && o + "queueHooks",
                        n = K.timers,
                        i = _e.get(this);
                    if (t) i[t] && i[t].stop && a(i[t]);
                    else for (t in i) i[t] && i[t].stop && ot.test(t) && a(i[t]);
                    for (t = n.length; t--;) n[t].elem !== this || null != o && n[t].queue !== o || (n[t].anim.stop(r), e = !1, n.splice(t, 1));
                    !e && r || K.dequeue(this, o)
                })
            },
            finish: function(a) {
                return !1 !== a && (a = a || "fx"), this.each(function() {
                    var e, t = _e.get(this),
                        n = t[a + "queue"],
                        i = t[a + "queueHooks"],
                        o = K.timers,
                        r = n ? n.length : 0;
                    for (t.finish = !0, K.queue(this, a, []), i && i.stop && i.stop.call(this, !0), e = o.length; e--;) o[e].elem === this && o[e].queue === a && (o[e].anim.stop(!0), o.splice(e, 1));
                    for (e = 0; e < r; e++) n[e] && n[e].finish && n[e].finish.call(this);
                    delete t.finish
                })
            }
        }), K.each(["toggle", "show", "hide"], function(e, i) {
            var o = K.fn[i];
            K.fn[i] = function(e, t, n) {
                return null == e || "boolean" == typeof e ? o.apply(this, arguments) : this.animate(N(i, !0), e, t, n)
            }
        }), K.each({
            slideDown: N("show"),
            slideUp: N("hide"),
            slideToggle: N("toggle"),
            fadeIn: {
                opacity: "show"
            },
            fadeOut: {
                opacity: "hide"
            },
            fadeToggle: {
                opacity: "toggle"
            }
        }, function(e, i) {
            K.fn[e] = function(e, t, n) {
                return this.animate(i, e, t, n)
            }
        }), K.timers = [], K.fx.tick = function() {
            var e, t = 0,
                n = K.timers;
            for (Ze = K.now(); t < n.length; t++)(e = n[t])() || n[t] !== e || n.splice(t--, 1);
            n.length || K.fx.stop(), Ze = undefined
        }, K.fx.timer = function(e) {
            K.timers.push(e), e() ? K.fx.start() : K.timers.pop()
        }, K.fx.interval = 13, K.fx.start = function() {
            Je || (Je = setInterval(K.fx.tick, K.fx.interval))
        }, K.fx.stop = function() {
            clearInterval(Je), Je = null
        }, K.fx.speeds = {
            slow: 600,
            fast: 200,
            _default: 400
        }, K.fn.delay = function(i, e) {
            return i = K.fx && K.fx.speeds[i] || i, e = e || "fx", this.queue(e, function(e, t) {
                var n = setTimeout(e, i);
                t.stop = function() {
                    clearTimeout(n)
                }
            })
        }, Ke = Z.createElement("input"), et = Z.createElement("select"), tt = et.appendChild(Z.createElement("option")), Ke.type = "checkbox", X.checkOn = "" !== Ke.value, X.optSelected = tt.selected, et.disabled = !0, X.optDisabled = !tt.disabled, (Ke = Z.createElement("input")).value = "t", Ke.type = "radio", X.radioValue = "t" === Ke.value;
        var st, lt, ct = K.expr.attrHandle;
        K.fn.extend({
            attr: function(e, t) {
                return me(this, K.attr, e, t, 1 < arguments.length)
            },
            removeAttr: function(e) {
                return this.each(function() {
                    K.removeAttr(this, e)
                })
            }
        }), K.extend({
            attr: function(e, t, n) {
                var i, o, r = e.nodeType;
                if (e && 3 !== r && 8 !== r && 2 !== r) return typeof e.getAttribute === Se ? K.prop(e, t, n) : (1 === r && K.isXMLDoc(e) || (t = t.toLowerCase(), i = K.attrHooks[t] || (K.expr.match.bool.test(t) ? lt : st)), n === undefined ? i && "get" in i && null !== (o = i.get(e, t)) ? o : null == (o = K.find.attr(e, t)) ? undefined : o : null !== n ? i && "set" in i && (o = i.set(e, n, t)) !== undefined ? o : (e.setAttribute(t, n + ""), n) : void K.removeAttr(e, t))
            },
            removeAttr: function(e, t) {
                var n, i, o = 0,
                    r = t && t.match(he);
                if (r && 1 === e.nodeType) for (; n = r[o++];) i = K.propFix[n] || n, K.expr.match.bool.test(n) && (e[i] = !1), e.removeAttribute(n)
            },
            attrHooks: {
                type: {
                    set: function(e, t) {
                        if (!X.radioValue && "radio" === t && K.nodeName(e, "input")) {
                            var n = e.value;
                            return e.setAttribute("type", t), n && (e.value = n), t
                        }
                    }
                }
            }
        }), lt = {
            set: function(e, t, n) {
                return !1 === t ? K.removeAttr(e, n) : e.setAttribute(n, n), n
            }
        }, K.each(K.expr.match.bool.source.match(/\w+/g), function(e, t) {
            var r = ct[t] || K.find.attr;
            ct[t] = function(e, t, n) {
                var i, o;
                return n || (o = ct[t], ct[t] = i, i = null != r(e, t, n) ? t.toLowerCase() : null, ct[t] = o), i
            }
        });
        var ut = /^(?:input|select|textarea|button)$/i;
        K.fn.extend({
            prop: function(e, t) {
                return me(this, K.prop, e, t, 1 < arguments.length)
            },
            removeProp: function(e) {
                return this.each(function() {
                    delete this[K.propFix[e] || e]
                })
            }
        }), K.extend({
            propFix: {
                "for": "htmlFor",
                "class": "className"
            },
            prop: function(e, t, n) {
                var i, o, r = e.nodeType;
                if (e && 3 !== r && 8 !== r && 2 !== r) return (1 !== r || !K.isXMLDoc(e)) && (t = K.propFix[t] || t, o = K.propHooks[t]), n !== undefined ? o && "set" in o && (i = o.set(e, n, t)) !== undefined ? i : e[t] = n : o && "get" in o && null !== (i = o.get(e, t)) ? i : e[t]
            },
            propHooks: {
                tabIndex: {
                    get: function(e) {
                        return e.hasAttribute("tabindex") || ut.test(e.nodeName) || e.href ? e.tabIndex : -1
                    }
                }
            }
        }), X.optSelected || (K.propHooks.selected = {
            get: function(e) {
                var t = e.parentNode;
                return t && t.parentNode && t.parentNode.selectedIndex, null
            }
        }), K.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function() {
            K.propFix[this.toLowerCase()] = this
        });
        var dt = /[\t\r\n\f]/g;
        K.fn.extend({
            addClass: function(t) {
                var e, n, i, o, r, a, s = "string" == typeof t && t,
                    l = 0,
                    c = this.length;
                if (K.isFunction(t)) return this.each(function(e) {
                    K(this).addClass(t.call(this, e, this.className))
                });
                if (s) for (e = (t || "").match(he) || []; l < c; l++) if (i = 1 === (n = this[l]).nodeType && (n.className ? (" " + n.className + " ").replace(dt, " ") : " ")) {
                    for (r = 0; o = e[r++];) i.indexOf(" " + o + " ") < 0 && (i += o + " ");
                    a = K.trim(i), n.className !== a && (n.className = a)
                }
                return this
            },
            removeClass: function(t) {
                var e, n, i, o, r, a, s = 0 === arguments.length || "string" == typeof t && t,
                    l = 0,
                    c = this.length;
                if (K.isFunction(t)) return this.each(function(e) {
                    K(this).removeClass(t.call(this, e, this.className))
                });
                if (s) for (e = (t || "").match(he) || []; l < c; l++) if (i = 1 === (n = this[l]).nodeType && (n.className ? (" " + n.className + " ").replace(dt, " ") : "")) {
                    for (r = 0; o = e[r++];) for (; 0 <= i.indexOf(" " + o + " ");) i = i.replace(" " + o + " ", " ");
                    a = t ? K.trim(i) : "", n.className !== a && (n.className = a)
                }
                return this
            },
            toggleClass: function(o, t) {
                var r = typeof o;
                return "boolean" == typeof t && "string" === r ? t ? this.addClass(o) : this.removeClass(o) : K.isFunction(o) ? this.each(function(e) {
                    K(this).toggleClass(o.call(this, e, this.className, t), t)
                }) : this.each(function() {
                    if ("string" === r) for (var e, t = 0, n = K(this), i = o.match(he) || []; e = i[t++];) n.hasClass(e) ? n.removeClass(e) : n.addClass(e);
                    else r !== Se && "boolean" !== r || (this.className && _e.set(this, "__className__", this.className), this.className = this.className || !1 === o ? "" : _e.get(this, "__className__") || "")
                })
            },
            hasClass: function(e) {
                for (var t = " " + e + " ", n = 0, i = this.length; n < i; n++) if (1 === this[n].nodeType && 0 <= (" " + this[n].className + " ").replace(dt, " ").indexOf(t)) return !0;
                return !1
            }
        });
        var ft = /\r/g;
        K.fn.extend({
            val: function(n) {
                var i, e, o, t = this[0];
                return arguments.length ? (o = K.isFunction(n), this.each(function(e) {
                    var t;
                    1 === this.nodeType && (null == (t = o ? n.call(this, e, K(this).val()) : n) ? t = "" : "number" == typeof t ? t += "" : K.isArray(t) && (t = K.map(t, function(e) {
                            return null == e ? "" : e + ""
                        })), (i = K.valHooks[this.type] || K.valHooks[this.nodeName.toLowerCase()]) && "set" in i && i.set(this, t, "value") !== undefined || (this.value = t))
                })) : t ? (i = K.valHooks[t.type] || K.valHooks[t.nodeName.toLowerCase()]) && "get" in i && (e = i.get(t, "value")) !== undefined ? e : "string" == typeof(e = t.value) ? e.replace(ft, "") : null == e ? "" : e : void 0
            }
        }), K.extend({
            valHooks: {
                option: {
                    get: function(e) {
                        var t = K.find.attr(e, "value");
                        return null != t ? t : K.trim(K.text(e))
                    }
                },
                select: {
                    get: function(e) {
                        for (var t, n, i = e.options, o = e.selectedIndex, r = "select-one" === e.type || o < 0, a = r ? null : [], s = r ? o + 1 : i.length, l = o < 0 ? s : r ? o : 0; l < s; l++) if (((n = i[l]).selected || l === o) && (X.optDisabled ? !n.disabled : null === n.getAttribute("disabled")) && (!n.parentNode.disabled || !K.nodeName(n.parentNode, "optgroup"))) {
                            if (t = K(n).val(), r) return t;
                            a.push(t)
                        }
                        return a
                    },
                    set: function(e, t) {
                        for (var n, i, o = e.options, r = K.makeArray(t), a = o.length; a--;)((i = o[a]).selected = 0 <= K.inArray(i.value, r)) && (n = !0);
                        return n || (e.selectedIndex = -1), r
                    }
                }
            }
        }), K.each(["radio", "checkbox"], function() {
            K.valHooks[this] = {
                set: function(e, t) {
                    if (K.isArray(t)) return e.checked = 0 <= K.inArray(K(e).val(), t)
                }
            }, X.checkOn || (K.valHooks[this].get = function(e) {
                return null === e.getAttribute("value") ? "on" : e.value
            })
        }), K.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function(e, n) {
            K.fn[n] = function(e, t) {
                return 0 < arguments.length ? this.on(n, null, e, t) : this.trigger(n)
            }
        }), K.fn.extend({
            hover: function(e, t) {
                return this.mouseenter(e).mouseleave(t || e)
            },
            bind: function(e, t, n) {
                return this.on(e, null, t, n)
            },
            unbind: function(e, t) {
                return this.off(e, null, t)
            },
            delegate: function(e, t, n, i) {
                return this.on(t, e, n, i)
            },
            undelegate: function(e, t, n) {
                return 1 === arguments.length ? this.off(e, "**") : this.off(t, e || "**", n)
            }
        });
        var ht = K.now(),
            pt = /\?/;
        K.parseJSON = function(e) {
            return JSON.parse(e + "")
        }, K.parseXML = function(e) {
            var t;
            if (!e || "string" != typeof e) return null;
            try {
                t = (new DOMParser).parseFromString(e, "text/xml")
            } catch (n) {
                t = undefined
            }
            return t && !t.getElementsByTagName("parsererror").length || K.error("Invalid XML: " + e), t
        };
        var mt = /#.*$/,
            _t = /([?&])_=[^&]*/,
            gt = /^(.*?):[ \t]*([^\r\n]*)$/gm,
            vt = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
            yt = /^(?:GET|HEAD)$/,
            bt = /^\/\//,
            wt = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
            xt = {},
            kt = {},
            Ct = "*/".concat("*"),
            Tt = p.location.href,
            St = wt.exec(Tt.toLowerCase()) || [];
        K.extend({
            active: 0,
            lastModified: {},
            etag: {},
            ajaxSettings: {
                url: Tt,
                type: "GET",
                isLocal: vt.test(St[1]),
                global: !0,
                processData: !0,
                async: !0,
                contentType: "application/x-www-form-urlencoded; charset=UTF-8",
                accepts: {
                    "*": Ct,
                    text: "text/plain",
                    html: "text/html",
                    xml: "application/xml, text/xml",
                    json: "application/json, text/javascript"
                },
                contents: {
                    xml: /xml/,
                    html: /html/,
                    json: /json/
                },
                responseFields: {
                    xml: "responseXML",
                    text: "responseText",
                    json: "responseJSON"
                },
                converters: {
                    "* text": String,
                    "text html": !0,
                    "text json": K.parseJSON,
                    "text xml": K.parseXML
                },
                flatOptions: {
                    url: !0,
                    context: !0
                }
            },
            ajaxSetup: function(e, t) {
                return t ? q(q(e, K.ajaxSettings), t) : q(K.ajaxSettings, e)
            },
            ajaxPrefilter: j(xt),
            ajaxTransport: j(kt),
            ajax: function(e, t) {
                function n(e, t, n, i) {
                    var o, r, a, s, l, c = t;
                    2 !== w && (w = 2, h && clearTimeout(h), u = undefined, f = i || "", x.readyState = 0 < e ? 4 : 0, o = 200 <= e && e < 300 || 304 === e, n && (s = O(m, x, n)), s = R(m, s, x, o), o ? (m.ifModified && ((l = x.getResponseHeader("Last-Modified")) && (K.lastModified[d] = l), (l = x.getResponseHeader("etag")) && (K.etag[d] = l)), 204 === e || "HEAD" === m.type ? c = "nocontent" : 304 === e ? c = "notmodified" : (c = s.state, r = s.data, o = !(a = s.error))) : (a = c, !e && c || (c = "error", e < 0 && (e = 0))), x.status = e, x.statusText = (t || c) + "", o ? v.resolveWith(_, [r, c, x]) : v.rejectWith(_, [x, c, a]), x.statusCode(b), b = undefined, p && g.trigger(o ? "ajaxSuccess" : "ajaxError", [x, m, o ? r : a]), y.fireWith(_, [x, c]), p && (g.trigger("ajaxComplete", [x, m]), --K.active || K.event.trigger("ajaxStop")))
                }
                "object" == typeof e && (t = e, e = undefined), t = t || {};
                var u, d, f, i, h, o, p, r, m = K.ajaxSetup({}, t),
                    _ = m.context || m,
                    g = m.context && (_.nodeType || _.jquery) ? K(_) : K.event,
                    v = K.Deferred(),
                    y = K.Callbacks("once memory"),
                    b = m.statusCode || {},
                    a = {},
                    s = {},
                    w = 0,
                    l = "canceled",
                    x = {
                        readyState: 0,
                        getResponseHeader: function(e) {
                            var t;
                            if (2 === w) {
                                if (!i) for (i = {}; t = gt.exec(f);) i[t[1].toLowerCase()] = t[2];
                                t = i[e.toLowerCase()]
                            }
                            return null == t ? null : t
                        },
                        getAllResponseHeaders: function() {
                            return 2 === w ? f : null
                        },
                        setRequestHeader: function(e, t) {
                            var n = e.toLowerCase();
                            return w || (e = s[n] = s[n] || e, a[e] = t), this
                        },
                        overrideMimeType: function(e) {
                            return w || (m.mimeType = e), this
                        },
                        statusCode: function(e) {
                            var t;
                            if (e) if (w < 2) for (t in e) b[t] = [b[t], e[t]];
                            else x.always(e[x.status]);
                            return this
                        },
                        abort: function(e) {
                            var t = e || l;
                            return u && u.abort(t), n(0, t), this
                        }
                    };
                if (v.promise(x).complete = y.add, x.success = x.done, x.error = x.fail, m.url = ((e || m.url || Tt) + "").replace(mt, "").replace(bt, St[1] + "//"), m.type = t.method || t.type || m.method || m.type, m.dataTypes = K.trim(m.dataType || "*").toLowerCase().match(he) || [""], null == m.crossDomain && (o = wt.exec(m.url.toLowerCase()), m.crossDomain = !(!o || o[1] === St[1] && o[2] === St[2] && (o[3] || ("http:" === o[1] ? "80" : "443")) === (St[3] || ("http:" === St[1] ? "80" : "443")))), m.data && m.processData && "string" != typeof m.data && (m.data = K.param(m.data, m.traditional)), L(xt, m, t, x), 2 === w) return x;
                for (r in (p = K.event && m.global) && 0 == K.active++ && K.event.trigger("ajaxStart"), m.type = m.type.toUpperCase(), m.hasContent = !yt.test(m.type), d = m.url, m.hasContent || (m.data && (d = m.url += (pt.test(d) ? "&" : "?") + m.data, delete m.data), !1 === m.cache && (m.url = _t.test(d) ? d.replace(_t, "$1_=" + ht++) : d + (pt.test(d) ? "&" : "?") + "_=" + ht++)), m.ifModified && (K.lastModified[d] && x.setRequestHeader("If-Modified-Since", K.lastModified[d]), K.etag[d] && x.setRequestHeader("If-None-Match", K.etag[d])), (m.data && m.hasContent && !1 !== m.contentType || t.contentType) && x.setRequestHeader("Content-Type", m.contentType), x.setRequestHeader("Accept", m.dataTypes[0] && m.accepts[m.dataTypes[0]] ? m.accepts[m.dataTypes[0]] + ("*" !== m.dataTypes[0] ? ", " + Ct + "; q=0.01" : "") : m.accepts["*"]), m.headers) x.setRequestHeader(r, m.headers[r]);
                if (m.beforeSend && (!1 === m.beforeSend.call(_, x, m) || 2 === w)) return x.abort();
                for (r in l = "abort", {
                    success: 1,
                    error: 1,
                    complete: 1
                }) x[r](m[r]);
                if (u = L(kt, m, t, x)) {
                    x.readyState = 1, p && g.trigger("ajaxSend", [x, m]), m.async && 0 < m.timeout && (h = setTimeout(function() {
                        x.abort("timeout")
                    }, m.timeout));
                    try {
                        w = 1, u.send(a, n)
                    } catch (c) {
                        if (!(w < 2)) throw c;
                        n(-1, c)
                    }
                } else n(-1, "No Transport");
                return x
            },
            getJSON: function(e, t, n) {
                return K.get(e, t, n, "json")
            },
            getScript: function(e, t) {
                return K.get(e, undefined, t, "script")
            }
        }), K.each(["get", "post"], function(e, o) {
            K[o] = function(e, t, n, i) {
                return K.isFunction(t) && (i = i || n, n = t, t = undefined), K.ajax({
                    url: e,
                    type: o,
                    dataType: i,
                    data: t,
                    success: n
                })
            }
        }), K._evalUrl = function(e) {
            return K.ajax({
                url: e,
                type: "GET",
                dataType: "script",
                async: !1,
                global: !1,
                "throws": !0
            })
        }, K.fn.extend({
            wrapAll: function(t) {
                var e;
                return K.isFunction(t) ? this.each(function(e) {
                    K(this).wrapAll(t.call(this, e))
                }) : (this[0] && (e = K(t, this[0].ownerDocument).eq(0).clone(!0), this[0].parentNode && e.insertBefore(this[0]), e.map(function() {
                    for (var e = this; e.firstElementChild;) e = e.firstElementChild;
                    return e
                }).append(this)), this)
            },
            wrapInner: function(n) {
                return K.isFunction(n) ? this.each(function(e) {
                    K(this).wrapInner(n.call(this, e))
                }) : this.each(function() {
                    var e = K(this),
                        t = e.contents();
                    t.length ? t.wrapAll(n) : e.append(n)
                })
            },
            wrap: function(t) {
                var n = K.isFunction(t);
                return this.each(function(e) {
                    K(this).wrapAll(n ? t.call(this, e) : t)
                })
            },
            unwrap: function() {
                return this.parent().each(function() {
                    K.nodeName(this, "body") || K(this).replaceWith(this.childNodes)
                }).end()
            }
        }), K.expr.filters.hidden = function(e) {
            return e.offsetWidth <= 0 && e.offsetHeight <= 0
        }, K.expr.filters.visible = function(e) {
            return !K.expr.filters.hidden(e)
        };
        var Dt = /%20/g,
            Et = /\[\]$/,
            It = /\r?\n/g,
            Nt = /^(?:submit|button|image|reset|file)$/i,
            Mt = /^(?:input|select|textarea|keygen)/i;
        K.param = function(e, t) {
            var n, i = [],
                o = function(e, t) {
                    t = K.isFunction(t) ? t() : null == t ? "" : t, i[i.length] = encodeURIComponent(e) + "=" + encodeURIComponent(t)
                };
            if (t === undefined && (t = K.ajaxSettings && K.ajaxSettings.traditional), K.isArray(e) || e.jquery && !K.isPlainObject(e)) K.each(e, function() {
                o(this.name, this.value)
            });
            else for (n in e) z(n, e[n], t, o);
            return i.join("&").replace(Dt, "+")
        }, K.fn.extend({
            serialize: function() {
                return K.param(this.serializeArray())
            },
            serializeArray: function() {
                return this.map(function() {
                    var e = K.prop(this, "elements");
                    return e ? K.makeArray(e) : this
                }).filter(function() {
                    var e = this.type;
                    return this.name && !K(this).is(":disabled") && Mt.test(this.nodeName) && !Nt.test(e) && (this.checked || !Te.test(e))
                }).map(function(e, t) {
                    var n = K(this).val();
                    return null == n ? null : K.isArray(n) ? K.map(n, function(e) {
                        return {
                            name: t.name,
                            value: e.replace(It, "\r\n")
                        }
                    }) : {
                        name: t.name,
                        value: n.replace(It, "\r\n")
                    }
                }).get()
            }
        }), K.ajaxSettings.xhr = function() {
            try {
                return new XMLHttpRequest
            } catch (e) {}
        };
        var Pt = 0,
            $t = {},
            At = {
                0: 200,
                1223: 204
            },
            jt = K.ajaxSettings.xhr();
        p.attachEvent && p.attachEvent("onunload", function() {
            for (var e in $t) $t[e]()
        }), X.cors = !! jt && "withCredentials" in jt, X.ajax = jt = !! jt, K.ajaxTransport(function(a) {
            var s;
            if (X.cors || jt && !a.crossDomain) return {
                send: function(e, t) {
                    var n, i = a.xhr(),
                        o = ++Pt;
                    if (i.open(a.type, a.url, a.async, a.username, a.password), a.xhrFields) for (n in a.xhrFields) i[n] = a.xhrFields[n];
                    for (n in a.mimeType && i.overrideMimeType && i.overrideMimeType(a.mimeType), a.crossDomain || e["X-Requested-With"] || (e["X-Requested-With"] = "XMLHttpRequest"), e) i.setRequestHeader(n, e[n]);
                    s = function(e) {
                        return function() {
                            s && (delete $t[o], s = i.onload = i.onerror = null, "abort" === e ? i.abort() : "error" === e ? t(i.status, i.statusText) : t(At[i.status] || i.status, i.statusText, "string" == typeof i.responseText ? {
                                text: i.responseText
                            } : undefined, i.getAllResponseHeaders()))
                        }
                    }, i.onload = s(), i.onerror = s("error"), s = $t[o] = s("abort");
                    try {
                        i.send(a.hasContent && a.data || null)
                    } catch (r) {
                        if (s) throw r
                    }
                },
                abort: function() {
                    s && s()
                }
            }
        }), K.ajaxSetup({
            accepts: {
                script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
            },
            contents: {
                script: /(?:java|ecma)script/
            },
            converters: {
                "text script": function(e) {
                    return K.globalEval(e), e
                }
            }
        }), K.ajaxPrefilter("script", function(e) {
            e.cache === undefined && (e.cache = !1), e.crossDomain && (e.type = "GET")
        }), K.ajaxTransport("script", function(n) {
            var i, o;
            if (n.crossDomain) return {
                send: function(e, t) {
                    i = K("<script>").prop({
                        async: !0,
                        charset: n.scriptCharset,
                        src: n.url
                    }).on("load error", o = function(e) {
                        i.remove(), o = null, e && t("error" === e.type ? 404 : 200, e.type)
                    }), Z.head.appendChild(i[0])
                },
                abort: function() {
                    o && o()
                }
            }
        });
        var Lt = [],
            qt = /(=)\?(?=&|$)|\?\?/;
        K.ajaxSetup({
            jsonp: "callback",
            jsonpCallback: function() {
                var e = Lt.pop() || K.expando + "_" + ht++;
                return this[e] = !0, e
            }
        }), K.ajaxPrefilter("json jsonp", function(e, t, n) {
            var i, o, r, a = !1 !== e.jsonp && (qt.test(e.url) ? "url" : "string" == typeof e.data && !(e.contentType || "").indexOf("application/x-www-form-urlencoded") && qt.test(e.data) && "data");
            if (a || "jsonp" === e.dataTypes[0]) return i = e.jsonpCallback = K.isFunction(e.jsonpCallback) ? e.jsonpCallback() : e.jsonpCallback, a ? e[a] = e[a].replace(qt, "$1" + i) : !1 !== e.jsonp && (e.url += (pt.test(e.url) ? "&" : "?") + e.jsonp + "=" + i), e.converters["script json"] = function() {
                return r || K.error(i + " was not called"), r[0]
            }, e.dataTypes[0] = "json", o = p[i], p[i] = function() {
                r = arguments
            }, n.always(function() {
                p[i] = o, e[i] && (e.jsonpCallback = t.jsonpCallback, Lt.push(i)), r && K.isFunction(o) && o(r[0]), r = o = undefined
            }), "script"
        }), K.parseHTML = function(e, t, n) {
            if (!e || "string" != typeof e) return null;
            "boolean" == typeof t && (n = t, t = !1), t = t || Z;
            var i = ae.exec(e),
                o = !n && [];
            return i ? [t.createElement(i[1])] : (i = K.buildFragment([e], t, o), o && o.length && K(o).remove(), K.merge([], i.childNodes))
        };
        var Ot = K.fn.load;
        K.fn.load = function(e, t, n) {
            if ("string" != typeof e && Ot) return Ot.apply(this, arguments);
            var i, o, r, a = this,
                s = e.indexOf(" ");
            return 0 <= s && (i = K.trim(e.slice(s)), e = e.slice(0, s)), K.isFunction(t) ? (n = t, t = undefined) : t && "object" == typeof t && (o = "POST"), 0 < a.length && K.ajax({
                url: e,
                type: o,
                dataType: "html",
                data: t
            }).done(function(e) {
                r = arguments, a.html(i ? K("<div>").append(K.parseHTML(e)).find(i) : e)
            }).complete(n &&
                function(e, t) {
                    a.each(n, r || [e.responseText, t, e])
                }), this
        }, K.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function(e, t) {
            K.fn[t] = function(e) {
                return this.on(t, e)
            }
        }), K.expr.filters.animated = function(t) {
            return K.grep(K.timers, function(e) {
                return t === e.elem
            }).length
        };
        var Rt = p.document.documentElement;
        K.offset = {
            setOffset: function(e, t, n) {
                var i, o, r, a, s, l, c = K.css(e, "position"),
                    u = K(e),
                    d = {};
                "static" === c && (e.style.position = "relative"), s = u.offset(), r = K.css(e, "top"), l = K.css(e, "left"), ("absolute" === c || "fixed" === c) && -1 < (r + l).indexOf("auto") ? (a = (i = u.position()).top, o = i.left) : (a = parseFloat(r) || 0, o = parseFloat(l) || 0), K.isFunction(t) && (t = t.call(e, n, s)), null != t.top && (d.top = t.top - s.top + a), null != t.left && (d.left = t.left - s.left + o), "using" in t ? t.using.call(e, d) : u.css(d)
            }
        }, K.fn.extend({
            offset: function(t) {
                if (arguments.length) return t === undefined ? this : this.each(function(e) {
                    K.offset.setOffset(this, t, e)
                });
                var e, n, i = this[0],
                    o = {
                        top: 0,
                        left: 0
                    },
                    r = i && i.ownerDocument;
                return r ? (e = r.documentElement, K.contains(e, i) ? (typeof i.getBoundingClientRect !== Se && (o = i.getBoundingClientRect()), n = F(r), {
                    top: o.top + n.pageYOffset - e.clientTop,
                    left: o.left + n.pageXOffset - e.clientLeft
                }) : o) : void 0
            },
            position: function() {
                if (this[0]) {
                    var e, t, n = this[0],
                        i = {
                            top: 0,
                            left: 0
                        };
                    return "fixed" === K.css(n, "position") ? t = n.getBoundingClientRect() : (e = this.offsetParent(), t = this.offset(), K.nodeName(e[0], "html") || (i = e.offset()), i.top += K.css(e[0], "borderTopWidth", !0), i.left += K.css(e[0], "borderLeftWidth", !0)), {
                        top: t.top - i.top - K.css(n, "marginTop", !0),
                        left: t.left - i.left - K.css(n, "marginLeft", !0)
                    }
                }
            },
            offsetParent: function() {
                return this.map(function() {
                    for (var e = this.offsetParent || Rt; e && !K.nodeName(e, "html") && "static" === K.css(e, "position");) e = e.offsetParent;
                    return e || Rt
                })
            }
        }), K.each({
            scrollLeft: "pageXOffset",
            scrollTop: "pageYOffset"
        }, function(t, o) {
            var r = "pageYOffset" === o;
            K.fn[t] = function(e) {
                return me(this, function(e, t, n) {
                    var i = F(e);
                    if (n === undefined) return i ? i[o] : e[t];
                    i ? i.scrollTo(r ? p.pageXOffset : n, r ? n : p.pageYOffset) : e[t] = n
                }, t, e, arguments.length, null)
            }
        }), K.each(["top", "left"], function(e, n) {
            K.cssHooks[n] = x(X.pixelPosition, function(e, t) {
                if (t) return t = w(e, n), Be.test(t) ? K(e).position()[n] + "px" : t
            })
        }), K.each({
            Height: "height",
            Width: "width"
        }, function(r, a) {
            K.each({
                padding: "inner" + r,
                content: a,
                "": "outer" + r
            }, function(i, e) {
                K.fn[e] = function(e, t) {
                    var n = arguments.length && (i || "boolean" != typeof e),
                        o = i || (!0 === e || !0 === t ? "margin" : "border");
                    return me(this, function(e, t, n) {
                        var i;
                        return K.isWindow(e) ? e.document.documentElement["client" + r] : 9 === e.nodeType ? (i = e.documentElement, Math.max(e.body["scroll" + r], i["scroll" + r], e.body["offset" + r], i["offset" + r], i["client" + r])) : n === undefined ? K.css(e, t, o) : K.style(e, t, n, o)
                    }, a, n ? e : undefined, n, null)
                }
            })
        }), K.fn.size = function() {
            return this.length
        }, K.fn.andSelf = K.fn.addBack, "function" == typeof define && define.amd && define("jquery", [], function() {
            return K
        });
        var zt = p.jQuery,
            Ft = p.$;
        return K.noConflict = function(e) {
            return p.$ === K && (p.$ = Ft), e && p.jQuery === K && (p.jQuery = zt), K
        }, typeof e === Se && (p.jQuery = p.$ = K), K
    }), function() {
    function e(s) {
        function l(e, t, n, i, o, r) {
            for (; 0 <= o && o < r; o += s) {
                var a = i ? i[o] : o;
                n = t(n, e[a], a, e)
            }
            return n
        }
        return function(e, t, n, i) {
            t = y(t, i, 4);
            var o = !S(e) && v.keys(e),
                r = (o || e).length,
                a = 0 < s ? 0 : r - 1;
            return arguments.length < 3 && (n = e[o ? o[a] : a], a += s), l(e, t, n, o, a, r)
        }
    }
    function t(r) {
        return function(e, t, n) {
            t = b(t, n);
            for (var i = T(e), o = 0 < r ? 0 : i - 1; 0 <= o && o < i; o += r) if (t(e[o], o, e)) return o;
            return -1
        }
    }
    function n(r, a, s) {
        return function(e, t, n) {
            var i = 0,
                o = T(e);
            if ("number" == typeof n) 0 < r ? i = 0 <= n ? n : Math.max(n + o, i) : o = 0 <= n ? Math.min(n + 1, o) : n + o + 1;
            else if (s && n && o) return e[n = s(e, t)] === t ? n : -1;
            if (t != t) return 0 <= (n = a(u.call(e, i, o), v.isNaN)) ? n + i : -1;
            for (n = 0 < r ? i : o - 1; 0 <= n && n < o; n += r) if (e[n] === t) return n;
            return -1
        }
    }
    function i(e, t) {
        var n = M.length,
            i = e.constructor,
            o = v.isFunction(i) && i.prototype || s,
            r = "constructor";
        for (v.has(e, r) && !v.contains(t, r) && t.push(r); n--;)(r = M[n]) in e && e[r] !== o[r] && !v.contains(t, r) && t.push(r)
    }
    var o = this,
        r = o._,
        a = Array.prototype,
        s = Object.prototype,
        l = Function.prototype,
        c = a.push,
        u = a.slice,
        d = s.toString,
        f = s.hasOwnProperty,
        h = Array.isArray,
        p = Object.keys,
        m = l.bind,
        _ = Object.create,
        g = function() {},
        v = function(e) {
            return e instanceof v ? e : this instanceof v ? void(this._wrapped = e) : new v(e)
        };
    "undefined" != typeof exports ? ("undefined" != typeof module && module.exports && (exports = module.exports = v), exports._ = v) : o._ = v, v.VERSION = "1.8.3";
    var y = function(o, r, e) {
            if (void 0 === r) return o;
            switch (null == e ? 3 : e) {
                case 1:
                    return function(e) {
                        return o.call(r, e)
                    };
                case 2:
                    return function(e, t) {
                        return o.call(r, e, t)
                    };
                case 3:
                    return function(e, t, n) {
                        return o.call(r, e, t, n)
                    };
                case 4:
                    return function(e, t, n, i) {
                        return o.call(r, e, t, n, i)
                    }
            }
            return function() {
                return o.apply(r, arguments)
            }
        },
        b = function(e, t, n) {
            return null == e ? v.identity : v.isFunction(e) ? y(e, t, n) : v.isObject(e) ? v.matcher(e) : v.property(e)
        };
    v.iteratee = function(e, t) {
        return b(e, t, Infinity)
    };
    var w = function(l, c) {
            return function(e) {
                var t = arguments.length;
                if (t < 2 || null == e) return e;
                for (var n = 1; n < t; n++) for (var i = arguments[n], o = l(i), r = o.length, a = 0; a < r; a++) {
                    var s = o[a];
                    c && void 0 !== e[s] || (e[s] = i[s])
                }
                return e
            }
        },
        x = function(e) {
            if (!v.isObject(e)) return {};
            if (_) return _(e);
            g.prototype = e;
            var t = new g;
            return g.prototype = null, t
        },
        k = function(t) {
            return function(e) {
                return null == e ? void 0 : e[t]
            }
        },
        C = Math.pow(2, 53) - 1,
        T = k("length"),
        S = function(e) {
            var t = T(e);
            return "number" == typeof t && 0 <= t && t <= C
        };
    v.each = v.forEach = function(e, t, n) {
        var i, o;
        if (t = y(t, n), S(e)) for (i = 0, o = e.length; i < o; i++) t(e[i], i, e);
        else {
            var r = v.keys(e);
            for (i = 0, o = r.length; i < o; i++) t(e[r[i]], r[i], e)
        }
        return e
    }, v.map = v.collect = function(e, t, n) {
        t = b(t, n);
        for (var i = !S(e) && v.keys(e), o = (i || e).length, r = Array(o), a = 0; a < o; a++) {
            var s = i ? i[a] : a;
            r[a] = t(e[s], s, e)
        }
        return r
    }, v.reduce = v.foldl = v.inject = e(1), v.reduceRight = v.foldr = e(-1), v.find = v.detect = function(e, t, n) {
        var i;
        if (void 0 !== (i = S(e) ? v.findIndex(e, t, n) : v.findKey(e, t, n)) && -1 !== i) return e[i]
    }, v.filter = v.select = function(e, i, t) {
        var o = [];
        return i = b(i, t), v.each(e, function(e, t, n) {
            i(e, t, n) && o.push(e)
        }), o
    }, v.reject = function(e, t, n) {
        return v.filter(e, v.negate(b(t)), n)
    }, v.every = v.all = function(e, t, n) {
        t = b(t, n);
        for (var i = !S(e) && v.keys(e), o = (i || e).length, r = 0; r < o; r++) {
            var a = i ? i[r] : r;
            if (!t(e[a], a, e)) return !1
        }
        return !0
    }, v.some = v.any = function(e, t, n) {
        t = b(t, n);
        for (var i = !S(e) && v.keys(e), o = (i || e).length, r = 0; r < o; r++) {
            var a = i ? i[r] : r;
            if (t(e[a], a, e)) return !0
        }
        return !1
    }, v.contains = v.includes = v.include = function(e, t, n, i) {
        return S(e) || (e = v.values(e)), ("number" != typeof n || i) && (n = 0), 0 <= v.indexOf(e, t, n)
    }, v.invoke = function(e, n) {
        var i = u.call(arguments, 2),
            o = v.isFunction(n);
        return v.map(e, function(e) {
            var t = o ? n : e[n];
            return null == t ? t : t.apply(e, i)
        })
    }, v.pluck = function(e, t) {
        return v.map(e, v.property(t))
    }, v.where = function(e, t) {
        return v.filter(e, v.matcher(t))
    }, v.findWhere = function(e, t) {
        return v.find(e, v.matcher(t))
    }, v.max = function(e, i, t) {
        var n, o, r = -Infinity,
            a = -Infinity;
        if (null == i && null != e) for (var s = 0, l = (e = S(e) ? e : v.values(e)).length; s < l; s++) n = e[s], r < n && (r = n);
        else i = b(i, t), v.each(e, function(e, t, n) {
            o = i(e, t, n), (a < o || o === -Infinity && r === -Infinity) && (r = e, a = o)
        });
        return r
    }, v.min = function(e, i, t) {
        var n, o, r = Infinity,
            a = Infinity;
        if (null == i && null != e) for (var s = 0, l = (e = S(e) ? e : v.values(e)).length; s < l; s++)(n = e[s]) < r && (r = n);
        else i = b(i, t), v.each(e, function(e, t, n) {
            ((o = i(e, t, n)) < a || o === Infinity && r === Infinity) && (r = e, a = o)
        });
        return r
    }, v.shuffle = function(e) {
        for (var t, n = S(e) ? e : v.values(e), i = n.length, o = Array(i), r = 0; r < i; r++)(t = v.random(0, r)) !== r && (o[r] = o[t]), o[t] = n[r];
        return o
    }, v.sample = function(e, t, n) {
        return null == t || n ? (S(e) || (e = v.values(e)), e[v.random(e.length - 1)]) : v.shuffle(e).slice(0, Math.max(0, t))
    }, v.sortBy = function(e, i, t) {
        return i = b(i, t), v.pluck(v.map(e, function(e, t, n) {
            return {
                value: e,
                index: t,
                criteria: i(e, t, n)
            }
        }).sort(function(e, t) {
            var n = e.criteria,
                i = t.criteria;
            if (n !== i) {
                if (i < n || void 0 === n) return 1;
                if (n < i || void 0 === i) return -1
            }
            return e.index - t.index
        }), "value")
    };
    var D = function(a) {
        return function(i, o, e) {
            var r = {};
            return o = b(o, e), v.each(i, function(e, t) {
                var n = o(e, t, i);
                a(r, e, n)
            }), r
        }
    };
    v.groupBy = D(function(e, t, n) {
        v.has(e, n) ? e[n].push(t) : e[n] = [t]
    }), v.indexBy = D(function(e, t, n) {
        e[n] = t
    }), v.countBy = D(function(e, t, n) {
        v.has(e, n) ? e[n]++ : e[n] = 1
    }), v.toArray = function(e) {
        return e ? v.isArray(e) ? u.call(e) : S(e) ? v.map(e, v.identity) : v.values(e) : []
    }, v.size = function(e) {
        return null == e ? 0 : S(e) ? e.length : v.keys(e).length
    }, v.partition = function(e, i, t) {
        i = b(i, t);
        var o = [],
            r = [];
        return v.each(e, function(e, t, n) {
            (i(e, t, n) ? o : r).push(e)
        }), [o, r]
    }, v.first = v.head = v.take = function(e, t, n) {
        if (null != e) return null == t || n ? e[0] : v.initial(e, e.length - t)
    }, v.initial = function(e, t, n) {
        return u.call(e, 0, Math.max(0, e.length - (null == t || n ? 1 : t)))
    }, v.last = function(e, t, n) {
        if (null != e) return null == t || n ? e[e.length - 1] : v.rest(e, Math.max(0, e.length - t))
    }, v.rest = v.tail = v.drop = function(e, t, n) {
        return u.call(e, null == t || n ? 1 : t)
    }, v.compact = function(e) {
        return v.filter(e, v.identity)
    };
    var E = function(e, t, n, i) {
        for (var o = [], r = 0, a = i || 0, s = T(e); a < s; a++) {
            var l = e[a];
            if (S(l) && (v.isArray(l) || v.isArguments(l))) {
                t || (l = E(l, t, n));
                var c = 0,
                    u = l.length;
                for (o.length += u; c < u;) o[r++] = l[c++]
            } else n || (o[r++] = l)
        }
        return o
    };
    v.flatten = function(e, t) {
        return E(e, t, !1)
    }, v.without = function(e) {
        return v.difference(e, u.call(arguments, 1))
    }, v.uniq = v.unique = function(e, t, n, i) {
        v.isBoolean(t) || (i = n, n = t, t = !1), null != n && (n = b(n, i));
        for (var o = [], r = [], a = 0, s = T(e); a < s; a++) {
            var l = e[a],
                c = n ? n(l, a, e) : l;
            t ? (a && r === c || o.push(l), r = c) : n ? v.contains(r, c) || (r.push(c), o.push(l)) : v.contains(o, l) || o.push(l)
        }
        return o
    }, v.union = function() {
        return v.uniq(E(arguments, !0, !0))
    }, v.intersection = function(e) {
        for (var t = [], n = arguments.length, i = 0, o = T(e); i < o; i++) {
            var r = e[i];
            if (!v.contains(t, r)) {
                for (var a = 1; a < n && v.contains(arguments[a], r); a++);
                a === n && t.push(r)
            }
        }
        return t
    }, v.difference = function(e) {
        var t = E(arguments, !0, !0, 1);
        return v.filter(e, function(e) {
            return !v.contains(t, e)
        })
    }, v.zip = function() {
        return v.unzip(arguments)
    }, v.unzip = function(e) {
        for (var t = e && v.max(e, T).length || 0, n = Array(t), i = 0; i < t; i++) n[i] = v.pluck(e, i);
        return n
    }, v.object = function(e, t) {
        for (var n = {}, i = 0, o = T(e); i < o; i++) t ? n[e[i]] = t[i] : n[e[i][0]] = e[i][1];
        return n
    }, v.findIndex = t(1), v.findLastIndex = t(-1), v.sortedIndex = function(e, t, n, i) {
        for (var o = (n = b(n, i, 1))(t), r = 0, a = T(e); r < a;) {
            var s = Math.floor((r + a) / 2);
            n(e[s]) < o ? r = s + 1 : a = s
        }
        return r
    }, v.indexOf = n(1, v.findIndex, v.sortedIndex), v.lastIndexOf = n(-1, v.findLastIndex), v.range = function(e, t, n) {
        null == t && (t = e || 0, e = 0), n = n || 1;
        for (var i = Math.max(Math.ceil((t - e) / n), 0), o = Array(i), r = 0; r < i; r++, e += n) o[r] = e;
        return o
    };
    var I = function(e, t, n, i, o) {
        if (!(i instanceof t)) return e.apply(n, o);
        var r = x(e.prototype),
            a = e.apply(r, o);
        return v.isObject(a) ? a : r
    };
    v.bind = function(e, t) {
        if (m && e.bind === m) return m.apply(e, u.call(arguments, 1));
        if (!v.isFunction(e)) throw new TypeError("Bind must be called on a function");
        var n = u.call(arguments, 2),
            i = function() {
                return I(e, i, t, this, n.concat(u.call(arguments)))
            };
        return i
    }, v.partial = function(o) {
        var r = u.call(arguments, 1),
            a = function() {
                for (var e = 0, t = r.length, n = Array(t), i = 0; i < t; i++) n[i] = r[i] === v ? arguments[e++] : r[i];
                for (; e < arguments.length;) n.push(arguments[e++]);
                return I(o, a, this, this, n)
            };
        return a
    }, v.bindAll = function(e) {
        var t, n, i = arguments.length;
        if (i <= 1) throw new Error("bindAll must be passed function names");
        for (t = 1; t < i; t++) e[n = arguments[t]] = v.bind(e[n], e);
        return e
    }, v.memoize = function(i, o) {
        var r = function(e) {
            var t = r.cache,
                n = "" + (o ? o.apply(this, arguments) : e);
            return v.has(t, n) || (t[n] = i.apply(this, arguments)), t[n]
        };
        return r.cache = {}, r
    }, v.delay = function(e, t) {
        var n = u.call(arguments, 2);
        return setTimeout(function() {
            return e.apply(null, n)
        }, t)
    }, v.defer = v.partial(v.delay, v, 1), v.throttle = function(n, i, o) {
        var r, a, s, l = null,
            c = 0;
        o || (o = {});
        var u = function() {
            c = !1 === o.leading ? 0 : v.now(), l = null, s = n.apply(r, a), l || (r = a = null)
        };
        return function() {
            var e = v.now();
            c || !1 !== o.leading || (c = e);
            var t = i - (e - c);
            return r = this, a = arguments, t <= 0 || i < t ? (l && (clearTimeout(l), l = null), c = e, s = n.apply(r, a), l || (r = a = null)) : l || !1 === o.trailing || (l = setTimeout(u, t)), s
        }
    }, v.debounce = function(t, n, i) {
        var o, r, a, s, l, c = function() {
            var e = v.now() - s;
            e < n && 0 <= e ? o = setTimeout(c, n - e) : (o = null, i || (l = t.apply(a, r), o || (a = r = null)))
        };
        return function() {
            a = this, r = arguments, s = v.now();
            var e = i && !o;
            return o || (o = setTimeout(c, n)), e && (l = t.apply(a, r), a = r = null), l
        }
    }, v.wrap = function(e, t) {
        return v.partial(t, e)
    }, v.negate = function(e) {
        return function() {
            return !e.apply(this, arguments)
        }
    }, v.compose = function() {
        var n = arguments,
            i = n.length - 1;
        return function() {
            for (var e = i, t = n[i].apply(this, arguments); e--;) t = n[e].call(this, t);
            return t
        }
    }, v.after = function(e, t) {
        return function() {
            if (--e < 1) return t.apply(this, arguments)
        }
    }, v.before = function(e, t) {
        var n;
        return function() {
            return 0 < --e && (n = t.apply(this, arguments)), e <= 1 && (t = null), n
        }
    }, v.once = v.partial(v.before, 2);
    var N = !{
            toString: null
        }.propertyIsEnumerable("toString"),
        M = ["valueOf", "isPrototypeOf", "toString", "propertyIsEnumerable", "hasOwnProperty", "toLocaleString"];
    v.keys = function(e) {
        if (!v.isObject(e)) return [];
        if (p) return p(e);
        var t = [];
        for (var n in e) v.has(e, n) && t.push(n);
        return N && i(e, t), t
    }, v.allKeys = function(e) {
        if (!v.isObject(e)) return [];
        var t = [];
        for (var n in e) t.push(n);
        return N && i(e, t), t
    }, v.values = function(e) {
        for (var t = v.keys(e), n = t.length, i = Array(n), o = 0; o < n; o++) i[o] = e[t[o]];
        return i
    }, v.mapObject = function(e, t, n) {
        t = b(t, n);
        for (var i, o = v.keys(e), r = o.length, a = {}, s = 0; s < r; s++) a[i = o[s]] = t(e[i], i, e);
        return a
    }, v.pairs = function(e) {
        for (var t = v.keys(e), n = t.length, i = Array(n), o = 0; o < n; o++) i[o] = [t[o], e[t[o]]];
        return i
    }, v.invert = function(e) {
        for (var t = {}, n = v.keys(e), i = 0, o = n.length; i < o; i++) t[e[n[i]]] = n[i];
        return t
    }, v.functions = v.methods = function(e) {
        var t = [];
        for (var n in e) v.isFunction(e[n]) && t.push(n);
        return t.sort()
    }, v.extend = w(v.allKeys), v.extendOwn = v.assign = w(v.keys), v.findKey = function(e, t, n) {
        t = b(t, n);
        for (var i, o = v.keys(e), r = 0, a = o.length; r < a; r++) if (t(e[i = o[r]], i, e)) return i
    }, v.pick = function(e, t, n) {
        var i, o, r = {},
            a = e;
        if (null == a) return r;
        v.isFunction(t) ? (o = v.allKeys(a), i = y(t, n)) : (o = E(arguments, !1, !1, 1), i = function(e, t, n) {
            return t in n
        }, a = Object(a));
        for (var s = 0, l = o.length; s < l; s++) {
            var c = o[s],
                u = a[c];
            i(u, c, a) && (r[c] = u)
        }
        return r
    }, v.omit = function(e, t, n) {
        if (v.isFunction(t)) t = v.negate(t);
        else {
            var i = v.map(E(arguments, !1, !1, 1), String);
            t = function(e, t) {
                return !v.contains(i, t)
            }
        }
        return v.pick(e, t, n)
    }, v.defaults = w(v.allKeys, !0), v.create = function(e, t) {
        var n = x(e);
        return t && v.extendOwn(n, t), n
    }, v.clone = function(e) {
        return v.isObject(e) ? v.isArray(e) ? e.slice() : v.extend({}, e) : e
    }, v.tap = function(e, t) {
        return t(e), e
    }, v.isMatch = function(e, t) {
        var n = v.keys(t),
            i = n.length;
        if (null == e) return !i;
        for (var o = Object(e), r = 0; r < i; r++) {
            var a = n[r];
            if (t[a] !== o[a] || !(a in o)) return !1
        }
        return !0
    };
    var P = function(e, t, n, i) {
        if (e === t) return 0 !== e || 1 / e == 1 / t;
        if (null == e || null == t) return e === t;
        e instanceof v && (e = e._wrapped), t instanceof v && (t = t._wrapped);
        var o = d.call(e);
        if (o !== d.call(t)) return !1;
        switch (o) {
            case "[object RegExp]":
            case "[object String]":
                return "" + e == "" + t;
            case "[object Number]":
                return +e != +e ? +t != +t : 0 == +e ? 1 / +e == 1 / t : +e == +t;
            case "[object Date]":
            case "[object Boolean]":
                return +e == +t
        }
        var r = "[object Array]" === o;
        if (!r) {
            if ("object" != typeof e || "object" != typeof t) return !1;
            var a = e.constructor,
                s = t.constructor;
            if (a !== s && !(v.isFunction(a) && a instanceof a && v.isFunction(s) && s instanceof s) && "constructor" in e && "constructor" in t) return !1
        }
        i = i || [];
        for (var l = (n = n || []).length; l--;) if (n[l] === e) return i[l] === t;
        if (n.push(e), i.push(t), r) {
            if ((l = e.length) !== t.length) return !1;
            for (; l--;) if (!P(e[l], t[l], n, i)) return !1
        } else {
            var c, u = v.keys(e);
            if (l = u.length, v.keys(t).length !== l) return !1;
            for (; l--;) if (c = u[l], !v.has(t, c) || !P(e[c], t[c], n, i)) return !1
        }
        return n.pop(), i.pop(), !0
    };
    v.isEqual = function(e, t) {
        return P(e, t)
    }, v.isEmpty = function(e) {
        return null == e || (S(e) && (v.isArray(e) || v.isString(e) || v.isArguments(e)) ? 0 === e.length : 0 === v.keys(e).length)
    }, v.isElement = function(e) {
        return !(!e || 1 !== e.nodeType)
    }, v.isArray = h ||
        function(e) {
            return "[object Array]" === d.call(e)
        }, v.isObject = function(e) {
        var t = typeof e;
        return "function" === t || "object" === t && !! e
    }, v.each(["Arguments", "Function", "String", "Number", "Date", "RegExp", "Error"], function(t) {
        v["is" + t] = function(e) {
            return d.call(e) === "[object " + t + "]"
        }
    }), v.isArguments(arguments) || (v.isArguments = function(e) {
        return v.has(e, "callee")
    }), "function" != typeof / . / && "object" != typeof Int8Array && (v.isFunction = function(e) {
        return "function" == typeof e || !1
    }), v.isFinite = function(e) {
        return isFinite(e) && !isNaN(parseFloat(e))
    }, v.isNaN = function(e) {
        return v.isNumber(e) && e !== +e
    }, v.isBoolean = function(e) {
        return !0 === e || !1 === e || "[object Boolean]" === d.call(e)
    }, v.isNull = function(e) {
        return null === e
    }, v.isUndefined = function(e) {
        return void 0 === e
    }, v.has = function(e, t) {
        return null != e && f.call(e, t)
    }, v.noConflict = function() {
        return o._ = r, this
    }, v.identity = function(e) {
        return e
    }, v.constant = function(e) {
        return function() {
            return e
        }
    }, v.noop = function() {}, v.property = k, v.propertyOf = function(t) {
        return null == t ?
            function() {} : function(e) {
                return t[e]
            }
    }, v.matcher = v.matches = function(t) {
        return t = v.extendOwn({}, t), function(e) {
            return v.isMatch(e, t)
        }
    }, v.times = function(e, t, n) {
        var i = Array(Math.max(0, e));
        t = y(t, n, 1);
        for (var o = 0; o < e; o++) i[o] = t(o);
        return i
    }, v.random = function(e, t) {
        return null == t && (t = e, e = 0), e + Math.floor(Math.random() * (t - e + 1))
    }, v.now = Date.now ||
        function() {
            return (new Date).getTime()
        };
    var $ = {
            "&": "&amp;",
            "<": "&lt;",
            ">": "&gt;",
            '"': "&quot;",
            "'": "&#x27;",
            "`": "&#x60;"
        },
        A = v.invert($),
        j = function(t) {
            var n = function(e) {
                    return t[e]
                },
                e = "(?:" + v.keys(t).join("|") + ")",
                i = RegExp(e),
                o = RegExp(e, "g");
            return function(e) {
                return e = null == e ? "" : "" + e, i.test(e) ? e.replace(o, n) : e
            }
        };
    v.escape = j($), v.unescape = j(A), v.result = function(e, t, n) {
        var i = null == e ? void 0 : e[t];
        return void 0 === i && (i = n), v.isFunction(i) ? i.call(e) : i
    };
    var L = 0;
    v.uniqueId = function(e) {
        var t = ++L + "";
        return e ? e + t : t
    }, v.templateSettings = {
        evaluate: /<%([\s\S]+?)%>/g,
        interpolate: /<%=([\s\S]+?)%>/g,
        escape: /<%-([\s\S]+?)%>/g
    };
    var q = /(.)^/,
        O = {
            "'": "'",
            "\\": "\\",
            "\r": "r",
            "\n": "n",
            "\u2028": "u2028",
            "\u2029": "u2029"
        },
        R = /\\|'|\r|\n|\u2028|\u2029/g,
        z = function(e) {
            return "\\" + O[e]
        };
    v.template = function(r, e, t) {
        !e && t && (e = t), e = v.defaults({}, e, v.templateSettings);
        var n = RegExp([(e.escape || q).source, (e.interpolate || q).source, (e.evaluate || q).source].join("|") + "|$", "g"),
            a = 0,
            s = "__p+='";
        r.replace(n, function(e, t, n, i, o) {
            return s += r.slice(a, o).replace(R, z), a = o + e.length, t ? s += "'+\n((__t=(" + t + "))==null?'':_.escape(__t))+\n'" : n ? s += "'+\n((__t=(" + n + "))==null?'':__t)+\n'" : i && (s += "';\n" + i + "\n__p+='"), e
        }), s += "';\n", e.variable || (s = "with(obj||{}){\n" + s + "}\n"), s = "var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n" + s + "return __p;\n";
        try {
            var i = new Function(e.variable || "obj", "_", s)
        } catch (c) {
            throw c.source = s, c
        }
        var o = function(e) {
                return i.call(this, e, v)
            },
            l = e.variable || "obj";
        return o.source = "function(" + l + "){\n" + s + "}", o
    }, v.chain = function(e) {
        var t = v(e);
        return t._chain = !0, t
    };
    var F = function(e, t) {
        return e._chain ? v(t).chain() : t
    };
    v.mixin = function(n) {
        v.each(v.functions(n), function(e) {
            var t = v[e] = n[e];
            v.prototype[e] = function() {
                var e = [this._wrapped];
                return c.apply(e, arguments), F(this, t.apply(v, e))
            }
        })
    }, v.mixin(v), v.each(["pop", "push", "reverse", "shift", "sort", "splice", "unshift"], function(t) {
        var n = a[t];
        v.prototype[t] = function() {
            var e = this._wrapped;
            return n.apply(e, arguments), "shift" !== t && "splice" !== t || 0 !== e.length || delete e[0], F(this, e)
        }
    }), v.each(["concat", "join", "slice"], function(e) {
        var t = a[e];
        v.prototype[e] = function() {
            return F(this, t.apply(this._wrapped, arguments))
        }
    }), v.prototype.value = function() {
        return this._wrapped
    }, v.prototype.valueOf = v.prototype.toJSON = v.prototype.value, v.prototype.toString = function() {
        return "" + this._wrapped
    }, "function" == typeof define && define.amd && define("underscore", [], function() {
        return v
    })
}.call(this), window.Detectizr = function(l, c, u, t) {
    function d(e, t) {
        var n, i, o;
        if (2 < arguments.length) for (n = 1, i = arguments.length; n < i; n += 1) d(e, arguments[n]);
        else for (o in t) t.hasOwnProperty(o) && (e[o] = t[o]);
        return e
    }
    function f(e) {
        return -1 < x.browser.userAgent.indexOf(e)
    }
    function h(e) {
        return e.test(x.browser.userAgent)
    }
    function p(e) {
        return e.exec(x.browser.userAgent)
    }
    function o(e) {
        return e.replace(/^\s+|\s+$/g, "")
    }
    function m(e) {
        return null === e || e === t ? "" : String(e).replace(/((\s|\-|\.)+[a-z0-9])/g, function(e) {
            return e.toUpperCase().replace(/(\s|\-|\.)/g, "")
        })
    }
    function n(e, t) {
        var n = t || "",
            i = 1 === e.nodeType && (e.className ? (" " + e.className + " ").replace(a, " ") : "");
        if (i) {
            for (; 0 <= i.indexOf(" " + n + " ");) i = i.replace(" " + n + " ", " ");
            e.className = t ? o(i) : ""
        }
    }
    function _(e, t, n) {
        e && (e = m(e), t && (g(e + (t = m(t)), !0), n && g(e + t + "_" + n, !0)))
    }
    function g(e, t) {
        e && k && (T.addAllFeaturesAsClass ? k.addTest(e, t) : (t = "function" == typeof t ? t() : t) ? k.addTest(e, !0) : (delete k[e], n(s, e)))
    }
    function v(e, t) {
        var n = (e.version = t).split(".");
        0 < n.length ? (n = n.reverse(), e.major = n.pop(), 0 < n.length ? (e.minor = n.pop(), 0 < n.length ? (n = n.reverse(), e.patch = n.join(".")) : e.patch = "0") : e.minor = "0") : e.major = "0"
    }
    function y() {
        l.clearTimeout(e), e = l.setTimeout(function() {
            r = x.device.orientation, l.innerHeight > l.innerWidth ? x.device.orientation = "portrait" : x.device.orientation = "landscape", g(x.device.orientation, !0), r !== x.device.orientation && g(r, !1)
        }, 10)
    }
    function b(e) {
        var t, n, i, o, r, a = c.plugins;
        for (o = a.length - 1; 0 <= o; o--) {
            for (n = (t = a[o]).name + t.description, i = 0, r = e.length; 0 <= r; r--) - 1 !== n.indexOf(e[r]) && (i += 1);
            if (i === e.length) return !0
        }
        return !1
    }
    function w(e) {
        var t;
        for (t = e.length - 1; 0 <= t; t--) try {
            new ActiveXObject(e[t])
        } catch (n) {}
        return !1
    }
    function i(e) {
        var t, n, i, o, r, a, s;
        if ((T = d({}, T, e || {})).detectDevice) {
            for (x.device = {
                type: "",
                model: "",
                orientation: ""
            }, i = x.device, h(/googletv|smarttv|smart-tv|internet.tv|netcast|nettv|appletv|boxee|kylo|roku|dlnadoc|roku|pov_tv|hbbtv|ce\-html/) ? (i.type = C[0], i.model = "smartTv") : h(/xbox|playstation.3|wii/) ? (i.type = C[0], i.model = "gameConsole") : h(/ip(a|ro)d/) ? (i.type = C[1], i.model = "ipad") : h(/tablet/) && !h(/rx-34/) || h(/folio/) ? (i.type = C[1], i.model = String(p(/playbook/) || "")) : h(/linux/) && h(/android/) && !h(/fennec|mobi|htc.magic|htcX06ht|nexus.one|sc-02b|fone.945/) ? (i.type = C[1], i.model = "android") : h(/kindle/) || h(/mac.os/) && h(/silk/) ? (i.type = C[1], i.model = "kindle") : h(/gt-p10|sc-01c|shw-m180s|sgh-t849|sch-i800|shw-m180l|sph-p100|sgh-i987|zt180|htc(.flyer|\_flyer)|sprint.atp51|viewpad7|pandigital(sprnova|nova)|ideos.s7|dell.streak.7|advent.vega|a101it|a70bht|mid7015|next2|nook/) || h(/mb511/) && h(/rutem/) ? (i.type = C[1], i.model = "android") : h(/bb10/) ? (i.type = C[1], i.model = "blackberry") : (i.model = p(/iphone|ipod|android|blackberry|opera mini|opera mobi|skyfire|maemo|windows phone|palm|iemobile|symbian|symbianos|fennec|j2me/), null !== i.model ? (i.type = C[2], i.model = String(i.model)) : (i.model = "", h(/bolt|fennec|iris|maemo|minimo|mobi|mowser|netfront|novarra|prism|rx-34|skyfire|tear|xv6875|xv6975|google.wireless.transcoder/) ? i.type = C[2] : h(/opera/) && h(/windows.nt.5/) && h(/htc|xda|mini|vario|samsung\-gt\-i8000|samsung\-sgh\-i9/) ? i.type = C[2] : h(/windows.(nt|xp|me|9)/) && !h(/phone/) || h(/win(9|.9|nt)/) || h(/\(windows 8\)/) ? i.type = C[3] : h(/macintosh|powerpc/) && !h(/silk/) ? (i.type = C[3], i.model = "mac") : h(/linux/) && h(/x11/) ? i.type = C[3] : h(/solaris|sunos|bsd/) ? i.type = C[3] : h(/cros/) ? i.type = C[3] : h(/bot|crawler|spider|yahoo|ia_archiver|covario-ids|findlinks|dataparksearch|larbin|mediapartners-google|ng-search|snappy|teoma|jeeves|tineye/) && !h(/mobile/) ? (i.type = C[3], i.model = "crawler") : i.type = C[2])), t = 0, n = C.length; t < n; t += 1) g(C[t], i.type === C[t]);
            T.detectDeviceModel && g(m(i.model), !0)
        }
        if (T.detectScreen && (i.screen = {}, k && k.mq && (k.mq("only screen and (max-width: 240px)") ? (i.screen.size = "veryVerySmall", g("veryVerySmallScreen", !0)) : k.mq("only screen and (max-width: 320px)") ? (i.screen.size = "verySmall", g("verySmallScreen", !0)) : k.mq("only screen and (max-width: 480px)") && (i.screen.size = "small", g("smallScreen", !0)), i.type !== C[1] && i.type !== C[2] || k.mq("only screen and (-moz-min-device-pixel-ratio: 1.3), only screen and (-o-min-device-pixel-ratio: 2.6/2), only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen  and (min-device-pixel-ratio: 1.3), only screen and (min-resolution: 1.3dppx)") && (i.screen.resolution = "high", g("highresolution", !0))), i.type === C[1] || i.type === C[2] ? (l.onresize = function(e) {
                y(e)
            }, y()) : (i.orientation = "landscape", g(i.orientation, !0))), T.detectOS && (x.os = {}, o = x.os, "" !== i.model && ("ipad" === i.model || "iphone" === i.model || "ipod" === i.model ? (o.name = "ios", v(o, (h(/os\s([\d_]+)/) ? RegExp.$1 : "").replace(/_/g, "."))) : "android" === i.model ? (o.name = "android", v(o, h(/android\s([\d\.]+)/) ? RegExp.$1 : "")) : "blackberry" === i.model ? (o.name = "blackberry", v(o, h(/version\/([^\s]+)/) ? RegExp.$1 : "")) : "playbook" === i.model && (o.name = "blackberry", v(o, h(/os ([^\s]+)/) ? RegExp.$1.replace(";", "") : ""))), o.name || (f("win") || f("16bit") ? (o.name = "windows", f("windows nt 6.3") ? v(o, "8.1") : f("windows nt 6.2") || h(/\(windows 8\)/) ? v(o, "8") : f("windows nt 6.1") ? v(o, "7") : f("windows nt 6.0") ? v(o, "vista") : f("windows nt 5.2") || f("windows nt 5.1") || f("windows xp") ? v(o, "xp") : f("windows nt 5.0") || f("windows 2000") ? v(o, "2k") : f("winnt") || f("windows nt") ? v(o, "nt") : f("win98") || f("windows 98") ? v(o, "98") : (f("win95") || f("windows 95")) && v(o, "95")) : f("mac") || f("darwin") ? (o.name = "mac os", f("68k") || f("68000") ? v(o, "68k") : f("ppc") || f("powerpc") ? v(o, "ppc") : f("os x") && v(o, (h(/os\sx\s([\d_]+)/) ? RegExp.$1 : "os x").replace(/_/g, "."))) : f("webtv") ? o.name = "webtv" : f("x11") || f("inux") ? o.name = "linux" : f("sunos") ? o.name = "sun" : f("irix") ? o.name = "irix" : f("freebsd") ? o.name = "freebsd" : f("bsd") && (o.name = "bsd")), o.name && (g(o.name, !0), o.major && (_(o.name, o.major), o.minor && _(o.name, o.major, o.minor))), h(/\sx64|\sx86|\swin64|\swow64|\samd64/) ? o.addressRegisterSize = "64bit" : o.addressRegisterSize = "32bit", g(o.addressRegisterSize, !0)), T.detectBrowser && (r = x.browser, h(/opera|webtv/) || !h(/msie\s([\d\w\.]+)/) && !f("trident") ? f("firefox") ? (r.engine = "gecko", r.name = "firefox", v(r, h(/firefox\/([\d\w\.]+)/) ? RegExp.$1 : "")) : f("gecko/") ? r.engine = "gecko" : f("opera") ? (r.name = "opera", r.engine = "presto", v(r, h(/version\/([\d\.]+)/) ? RegExp.$1 : h(/opera(\s|\/)([\d\.]+)/) ? RegExp.$2 : "")) : f("konqueror") ? r.name = "konqueror" : f("chrome") ? (r.engine = "webkit", r.name = "chrome", v(r, h(/chrome\/([\d\.]+)/) ? RegExp.$1 : "")) : f("iron") ? (r.engine = "webkit", r.name = "iron") : f("crios") ? (r.name = "chrome", r.engine = "webkit", v(r, h(/crios\/([\d\.]+)/) ? RegExp.$1 : "")) : f("applewebkit/") ? (r.name = "safari", r.engine = "webkit", v(r, h(/version\/([\d\.]+)/) ? RegExp.$1 : "")) : f("mozilla/") && (r.engine = "gecko") : (r.engine = "trident", r.name = "ie", !l.addEventListener && u.documentMode && 7 === u.documentMode ? v(r, "8.compat") : h(/trident.*rv[ :](\d+)\./) ? v(r, RegExp.$1) : v(r, h(/trident\/4\.0/) ? "8" : RegExp.$1)), r.name && (g(r.name, !0), r.major && (_(r.name, r.major), r.minor && _(r.name, r.major, r.minor))), g(r.engine, !0), r.language = c.userLanguage || c.language, g(r.language, !0)), T.detectPlugins) {
            for (r.plugins = [], t = S.length - 1; 0 <= t; t--) a = S[t], s = !1, l.ActiveXObject ? s = w(a.progIds) : c.plugins && (s = b(a.substrs)), s && (r.plugins.push(a.name), g(a.name, !0));
            c.javaEnabled() && (r.plugins.push("java"), g("java", !0))
        }
    }
    var e, r, x = {},
        k = l.Modernizr,
        C = ["tv", "tablet", "mobile", "desktop"],
        T = {
            addAllFeaturesAsClass: !1,
            detectDevice: !0,
            detectDeviceModel: !0,
            detectScreen: !0,
            detectOS: !0,
            detectBrowser: !0,
            detectPlugins: !0
        },
        S = [{
            name: "adobereader",
            substrs: ["Adobe", "Acrobat"],
            progIds: ["AcroPDF.PDF", "PDF.PDFCtrl.5"]
        }, {
            name: "flash",
            substrs: ["Shockwave Flash"],
            progIds: ["ShockwaveFlash.ShockwaveFlash.1"]
        }, {
            name: "wmplayer",
            substrs: ["Windows Media"],
            progIds: ["wmplayer.ocx"]
        }, {
            name: "silverlight",
            substrs: ["Silverlight"],
            progIds: ["AgControl.AgControl"]
        }, {
            name: "quicktime",
            substrs: ["QuickTime"],
            progIds: ["QuickTime.QuickTime"]
        }],
        a = /[\t\r\n]/g,
        s = u.documentElement;
    return x.detect = function(e) {
        return i(e)
    }, x.init = function() {
        x !== t && (x.browser = {
            userAgent: (c.userAgent || c.vendor || l.opera).toLowerCase()
        }, x.detect())
    }, x.init(), x
}(this, this.navigator, this.document), window.Modernizr = function(i, d, a) {
    function o(e) {
        y.cssText = e
    }
    function e(e, t) {
        return o(k.join(e + ";") + (t || ""))
    }
    function r(e, t) {
        return typeof e === t
    }
    function s(e, t) {
        return !!~ ("" + e).indexOf(t)
    }
    function l(e, t) {
        for (var n in e) {
            var i = e[n];
            if (!s(i, "-") && y[i] !== a) return "pfx" != t || i
        }
        return !1
    }
    function c(e, t, n) {
        for (var i in e) {
            var o = t[e[i]];
            if (o !== a) return !1 === n ? e[i] : r(o, "function") ? o.bind(n || t) : o
        }
        return !1
    }
    function u(e, t, n) {
        var i = e.charAt(0).toUpperCase() + e.slice(1),
            o = (e + " " + T.join(i + " ") + i).split(" ");
        return r(t, "string") || r(t, "undefined") ? l(o, t) : c(o = (e + " " + S.join(i + " ") + i).split(" "), t, n)
    }
    function t() {
        p.input = function(e) {
            for (var t = 0, n = e.length; t < n; t++) N[e[t]] = !! (e[t] in b);
            return N.list && (N.list = !(!d.createElement("datalist") || !i.HTMLDataListElement)), N
        }("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")), p.inputtypes = function(e) {
            for (var t, n, i, o = 0, r = e.length; o < r; o++) b.setAttribute("type", n = e[o]), (t = "text" !== b.type) && (b.value = w, b.style.cssText = "position:absolute;visibility:hidden;", /^range$/.test(n) && b.style.WebkitAppearance !== a ? (_.appendChild(b), t = (i = d.defaultView).getComputedStyle && "textfield" !== i.getComputedStyle(b, null).WebkitAppearance && 0 !== b.offsetHeight, _.removeChild(b)) : /^(search|tel)$/.test(n) || (t = /^(url|email)$/.test(n) ? b.checkValidity && !1 === b.checkValidity() : b.value != w)), I[e[o]] = !! t;
            return I
        }("search tel url email datetime date month week time datetime-local number range color".split(" "))
    }
    var n, f, h = "2.8.3",
        p = {},
        m = !0,
        _ = d.documentElement,
        g = "modernizr",
        v = d.createElement(g),
        y = v.style,
        b = d.createElement("input"),
        w = ":)",
        x = {}.toString,
        k = " -webkit- -moz- -o- -ms- ".split(" "),
        C = "Webkit Moz O ms",
        T = C.split(" "),
        S = C.toLowerCase().split(" "),
        D = {
            svg: "http://www.w3.org/2000/svg"
        },
        E = {},
        I = {},
        N = {},
        M = [],
        P = M.slice,
        $ = function(e, t, n, i) {
            var o, r, a, s, l = d.createElement("div"),
                c = d.body,
                u = c || d.createElement("body");
            if (parseInt(n, 10)) for (; n--;)(a = d.createElement("div")).id = i ? i[n] : g + (n + 1), l.appendChild(a);
            return o = ["&#173;", '<style id="s', g, '">', e, "</style>"].join(""), l.id = g, (c ? l : u).innerHTML += o, u.appendChild(l), c || (u.style.background = "", u.style.overflow = "hidden", s = _.style.overflow, _.style.overflow = "hidden", _.appendChild(u)), r = t(l, e), c ? l.parentNode.removeChild(l) : (u.parentNode.removeChild(u), _.style.overflow = s), !! r
        },
        A = function(e) {
            var t, n = i.matchMedia || i.msMatchMedia;
            return n ? n(e) && n(e).matches || !1 : ($("@media " + e + " { #" + g + " { position: absolute; } }", function(e) {
                t = "absolute" == (i.getComputedStyle ? getComputedStyle(e, null) : e.currentStyle).position
            }), t)
        },
        j = function() {
            function e(e, t) {
                t = t || d.createElement(i[e] || "div");
                var n = (e = "on" + e) in t;
                return n || (t.setAttribute || (t = d.createElement("div")), t.setAttribute && t.removeAttribute && (t.setAttribute(e, ""), n = r(t[e], "function"), r(t[e], "undefined") || (t[e] = a), t.removeAttribute(e))), t = null, n
            }
            var i = {
                select: "input",
                change: "input",
                submit: "form",
                reset: "form",
                error: "img",
                load: "img",
                abort: "img"
            };
            return e
        }(),
        L = {}.hasOwnProperty;
    for (var q in f = r(L, "undefined") || r(L.call, "undefined") ?
        function(e, t) {
            return t in e && r(e.constructor.prototype[t], "undefined")
        } : function(e, t) {
            return L.call(e, t)
        }, Function.prototype.bind || (Function.prototype.bind = function(i) {
        var o = this;
        if ("function" != typeof o) throw new TypeError;
        var r = P.call(arguments, 1),
            a = function() {
                if (this instanceof a) {
                    var e = function() {};
                    e.prototype = o.prototype;
                    var t = new e,
                        n = o.apply(t, r.concat(P.call(arguments)));
                    return Object(n) === n ? n : t
                }
                return o.apply(i, r.concat(P.call(arguments)))
            };
        return a
    }), E.flexbox = function() {
        return u("flexWrap")
    }, E.flexboxlegacy = function() {
        return u("boxDirection")
    }, E.canvas = function() {
        var e = d.createElement("canvas");
        return !(!e.getContext || !e.getContext("2d"))
    }, E.canvastext = function() {
        return !(!p.canvas || !r(d.createElement("canvas").getContext("2d").fillText, "function"))
    }, E.webgl = function() {
        return !!i.WebGLRenderingContext
    }, E.touch = function() {
        var t;
        return "ontouchstart" in i || i.DocumentTouch && d instanceof DocumentTouch ? t = !0 : $(["@media (", k.join("touch-enabled),("), g, ")", "{#modernizr{top:9px;position:absolute}}"].join(""), function(e) {
            t = 9 === e.offsetTop
        }), t
    }, E.geolocation = function() {
        return "geolocation" in navigator
    }, E.postmessage = function() {
        return !!i.postMessage
    }, E.websqldatabase = function() {
        return !!i.openDatabase
    }, E.indexedDB = function() {
        return !!u("indexedDB", i)
    }, E.hashchange = function() {
        return j("hashchange", i) && (d.documentMode === a || 7 < d.documentMode)
    }, E.history = function() {
        return !(!i.history || !history.pushState)
    }, E.draganddrop = function() {
        var e = d.createElement("div");
        return "draggable" in e || "ondragstart" in e && "ondrop" in e
    }, E.websockets = function() {
        return "WebSocket" in i || "MozWebSocket" in i
    }, E.rgba = function() {
        return o("background-color:rgba(150,255,150,.5)"), s(y.backgroundColor, "rgba")
    }, E.hsla = function() {
        return o("background-color:hsla(120,40%,100%,.5)"), s(y.backgroundColor, "rgba") || s(y.backgroundColor, "hsla")
    }, E.multiplebgs = function() {
        return o("background:url(https://),url(https://),red url(https://)"), /(url\s*\(.*?){3}/.test(y.background)
    }, E.backgroundsize = function() {
        return u("backgroundSize")
    }, E.borderimage = function() {
        return u("borderImage")
    }, E.borderradius = function() {
        return u("borderRadius")
    }, E.boxshadow = function() {
        return u("boxShadow")
    }, E.textshadow = function() {
        return "" === d.createElement("div").style.textShadow
    }, E.opacity = function() {
        return e("opacity:.55"), /^0.55$/.test(y.opacity)
    }, E.cssanimations = function() {
        return u("animationName")
    }, E.csscolumns = function() {
        return u("columnCount")
    }, E.cssgradients = function() {
        var e = "background-image:",
            t = "gradient(linear,left top,right bottom,from(#9f9),to(white));",
            n = "linear-gradient(left top,#9f9, white);";
        return o((e + "-webkit- ".split(" ").join(t + e) + k.join(n + e)).slice(0, -e.length)), s(y.backgroundImage, "gradient")
    }, E.cssreflections = function() {
        return u("boxReflect")
    }, E.csstransforms = function() {
        return !!u("transform")
    }, E.csstransforms3d = function() {
        var t = !! u("perspective");
        return t && "webkitPerspective" in _.style && $("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}", function(e) {
            t = 9 === e.offsetLeft && 3 === e.offsetHeight
        }), t
    }, E.csstransitions = function() {
        return u("transition")
    }, E.fontface = function() {
        var r;
        return $('@font-face {font-family:"font";src:url("https://")}', function(e, t) {
            var n = d.getElementById("smodernizr"),
                i = n.sheet || n.styleSheet,
                o = i ? i.cssRules && i.cssRules[0] ? i.cssRules[0].cssText : i.cssText || "" : "";
            r = /src/i.test(o) && 0 === o.indexOf(t.split(" ")[0])
        }), r
    }, E.generatedcontent = function() {
        var t;
        return $(["#", g, "{font:0/0 a}#", g, ':after{content:"', w, '";visibility:hidden;font:3px/1 a}'].join(""), function(e) {
            t = 3 <= e.offsetHeight
        }), t
    }, E.video = function() {
        var e = d.createElement("video"),
            t = !1;
        try {
            (t = !! e.canPlayType) && ((t = new Boolean(t)).ogg = e.canPlayType('video/ogg; codecs="theora"').replace(/^no$/, ""), t.h264 = e.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/, ""), t.webm = e.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/, ""))
        } catch (n) {}
        return t
    }, E.audio = function() {
        var e = d.createElement("audio"),
            t = !1;
        try {
            (t = !! e.canPlayType) && ((t = new Boolean(t)).ogg = e.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/, ""), t.mp3 = e.canPlayType("audio/mpeg;").replace(/^no$/, ""), t.wav = e.canPlayType('audio/wav; codecs="1"').replace(/^no$/, ""), t.m4a = (e.canPlayType("audio/x-m4a;") || e.canPlayType("audio/aac;")).replace(/^no$/, ""))
        } catch (n) {}
        return t
    }, E.localstorage = function() {
        try {
            return localStorage.setItem(g, g), localStorage.removeItem(g), !0
        } catch (e) {
            return !1
        }
    }, E.sessionstorage = function() {
        try {
            return sessionStorage.setItem(g, g), sessionStorage.removeItem(g), !0
        } catch (e) {
            return !1
        }
    }, E.webworkers = function() {
        return !!i.Worker
    }, E.applicationcache = function() {
        return !!i.applicationCache
    }, E.svg = function() {
        return !!d.createElementNS && !! d.createElementNS(D.svg, "svg").createSVGRect
    }, E.inlinesvg = function() {
        var e = d.createElement("div");
        return e.innerHTML = "<svg/>", (e.firstChild && e.firstChild.namespaceURI) == D.svg
    }, E.smil = function() {
        return !!d.createElementNS && /SVGAnimate/.test(x.call(d.createElementNS(D.svg, "animate")))
    }, E.svgclippaths = function() {
        return !!d.createElementNS && /SVGClipPath/.test(x.call(d.createElementNS(D.svg, "clipPath")))
    }, E) f(E, q) && (n = q.toLowerCase(), p[n] = E[q](), M.push((p[n] ? "" : "no-") + n));
    return p.input || t(), p.addTest = function(e, t) {
        if ("object" == typeof e) for (var n in e) f(e, n) && p.addTest(n, e[n]);
        else {
            if (e = e.toLowerCase(), p[e] !== a) return p;
            t = "function" == typeof t ? t() : t, void 0 !== m && m && (_.className += " " + (t ? "" : "no-") + e), p[e] = t
        }
        return p
    }, o(""), v = b = null, function(e, a) {
        function n(e, t) {
            var n = e.createElement("p"),
                i = e.getElementsByTagName("head")[0] || e.documentElement;
            return n.innerHTML = "x<style>" + t + "</style>", i.insertBefore(n.lastChild, i.firstChild)
        }
        function s() {
            var e = v.elements;
            return "string" == typeof e ? e.split(" ") : e
        }
        function l(e) {
            var t = g[e[m]];
            return t || (t = {}, _++, e[m] = _, g[_] = t), t
        }
        function i(e, t, n) {
            return t || (t = a), u ? t.createElement(e) : (n || (n = l(t)), !(i = n.cache[e] ? n.cache[e].cloneNode() : p.test(e) ? (n.cache[e] = n.createElem(e)).cloneNode() : n.createElem(e)).canHaveChildren || h.test(e) || i.tagUrn ? i : n.frag.appendChild(i));
            var i
        }
        function t(e, t) {
            if (e || (e = a), u) return e.createDocumentFragment();
            for (var n = (t = t || l(e)).frag.cloneNode(), i = 0, o = s(), r = o.length; i < r; i++) n.createElement(o[i]);
            return n
        }
        function o(t, n) {
            n.cache || (n.cache = {}, n.createElem = t.createElement, n.createFrag = t.createDocumentFragment, n.frag = n.createFrag()), t.createElement = function(e) {
                return v.shivMethods ? i(e, t, n) : n.createElem(e)
            }, t.createDocumentFragment = Function("h,f", "return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&(" + s().join().replace(/[\w\-]+/g, function(e) {
                    return n.createElem(e), n.frag.createElement(e), 'c("' + e + '")'
                }) + ");return n}")(v, n.frag)
        }
        function r(e) {
            e || (e = a);
            var t = l(e);
            return !v.shivCSS || c || t.hasCSS || (t.hasCSS = !! n(e, "article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")), u || o(e, t), e
        }
        var c, u, d = "3.7.0",
            f = e.html5 || {},
            h = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,
            p = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,
            m = "_html5shiv",
            _ = 0,
            g = {};
        !
            function() {
                try {
                    var e = a.createElement("a");
                    e.innerHTML = "<xyz></xyz>", c = "hidden" in e, u = 1 == e.childNodes.length ||
                        function() {
                            a.createElement("a");
                            var e = a.createDocumentFragment();
                            return "undefined" == typeof e.cloneNode || "undefined" == typeof e.createDocumentFragment || "undefined" == typeof e.createElement
                        }()
                } catch (t) {
                    u = c = !0
                }
            }();
        var v = {
            elements: f.elements || "abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",
            version: d,
            shivCSS: !1 !== f.shivCSS,
            supportsUnknownElements: u,
            shivMethods: !1 !== f.shivMethods,
            type: "default",
            shivDocument: r,
            createElement: i,
            createDocumentFragment: t
        };
        e.html5 = v, r(a)
    }(this, d), p._version = h, p._prefixes = k, p._domPrefixes = S, p._cssomPrefixes = T, p.mq = A, p.hasEvent = j, p.testProp = function(e) {
        return l([e])
    }, p.testAllProps = u, p.testStyles = $, p.prefixed = function(e, t, n) {
        return t ? u(e, t, n) : u(e, "pfx")
    }, _.className = _.className.replace(/(^|\s)no-js(\s|$)/, "$1$2") + (m ? " js " + M.join(" ") : ""), p
}(this, this.document), "object" != typeof JSON && (JSON = {}), function() {
    "use strict";

    function f(e) {
        return e < 10 ? "0" + e : e
    }
    function this_value() {
        return this.valueOf()
    }
    function quote(e) {
        return rx_escapable.lastIndex = 0, rx_escapable.test(e) ? '"' + e.replace(rx_escapable, function(e) {
                var t = meta[e];
                return "string" == typeof t ? t : "\\u" + ("0000" + e.charCodeAt(0).toString(16)).slice(-4)
            }) + '"' : '"' + e + '"'
    }
    function str(e, t) {
        var n, i, o, r, a, s = gap,
            l = t[e];
        switch (l && "object" == typeof l && "function" == typeof l.toJSON && (l = l.toJSON(e)), "function" == typeof rep && (l = rep.call(t, e, l)), typeof l) {
            case "string":
                return quote(l);
            case "number":
                return isFinite(l) ? String(l) : "null";
            case "boolean":
            case "null":
                return String(l);
            case "object":
                if (!l) return "null";
                if (gap += indent, a = [], "[object Array]" === Object.prototype.toString.apply(l)) {
                    for (r = l.length, n = 0; n < r; n += 1) a[n] = str(n, l) || "null";
                    return o = 0 === a.length ? "[]" : gap ? "[\n" + gap + a.join(",\n" + gap) + "\n" + s + "]" : "[" + a.join(",") + "]", gap = s, o
                }
                if (rep && "object" == typeof rep) for (r = rep.length, n = 0; n < r; n += 1)"string" == typeof rep[n] && (o = str(i = rep[n], l)) && a.push(quote(i) + (gap ? ": " : ":") + o);
                else for (i in l) Object.prototype.hasOwnProperty.call(l, i) && (o = str(i, l)) && a.push(quote(i) + (gap ? ": " : ":") + o);
                return o = 0 === a.length ? "{}" : gap ? "{\n" + gap + a.join(",\n" + gap) + "\n" + s + "}" : "{" + a.join(",") + "}", gap = s, o
        }
    }
    var rx_one = /^[\],:{}\s]*$/,
        rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
        rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
        rx_four = /(?:^|:|,)(?:\s*\[)+/g,
        rx_escapable = /[\\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
        rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
        gap, indent, meta, rep;
    "function" != typeof Date.prototype.toJSON && (Date.prototype.toJSON = function() {
        return isFinite(this.valueOf()) ? this.getUTCFullYear() + "-" + f(this.getUTCMonth() + 1) + "-" + f(this.getUTCDate()) + "T" + f(this.getUTCHours()) + ":" + f(this.getUTCMinutes()) + ":" + f(this.getUTCSeconds()) + "Z" : null
    }, Boolean.prototype.toJSON = this_value, Number.prototype.toJSON = this_value, String.prototype.toJSON = this_value), "function" != typeof JSON.stringify && (meta = {
        "\b": "\\b",
        "\t": "\\t",
        "\n": "\\n",
        "\f": "\\f",
        "\r": "\\r",
        '"': '\\"',
        "\\": "\\\\"
    }, JSON.stringify = function(e, t, n) {
        var i;
        if (indent = gap = "", "number" == typeof n) for (i = 0; i < n; i += 1) indent += " ";
        else "string" == typeof n && (indent = n);
        if ((rep = t) && "function" != typeof t && ("object" != typeof t || "number" != typeof t.length)) throw new Error("JSON.stringify");
        return str("", {
            "": e
        })
    }), "function" != typeof JSON.parse && (JSON.parse = function(text, reviver) {
        function walk(e, t) {
            var n, i, o = e[t];
            if (o && "object" == typeof o) for (n in o) Object.prototype.hasOwnProperty.call(o, n) && ((i = walk(o, n)) !== undefined ? o[n] = i : delete o[n]);
            return reviver.call(e, t, o)
        }
        var j;
        if (text = String(text), rx_dangerous.lastIndex = 0, rx_dangerous.test(text) && (text = text.replace(rx_dangerous, function(e) {
                return "\\u" + ("0000" + e.charCodeAt(0).toString(16)).slice(-4)
            })), rx_one.test(text.replace(rx_two, "@").replace(rx_three, "]").replace(rx_four, ""))) return j = eval("(" + text + ")"), "function" == typeof reviver ? walk({
            "": j
        }, "") : j;
        throw new SyntaxError("JSON.parse")
    })
}(), function() {
    this.Turbolinks = {
        supported: null != window.history.pushState && null != window.requestAnimationFrame && null != window.addEventListener,
        visit: function(e, t) {
            return Turbolinks.controller.visit(e, t)
        },
        clearCache: function() {
            return Turbolinks.controller.clearCache()
        },
        setProgressBarDelay: function(e) {
            return Turbolinks.controller.setProgressBarDelay(e)
        }
    }
}.call(this), function() {
    var n, i, l, e, t, o, r, a, s, c = [].slice;
    Turbolinks.copyObject = function(e) {
        var t, n, i;
        for (t in n = {}, e) i = e[t], n[t] = i;
        return n
    }, Turbolinks.closest = function(e, t) {
        return n.call(e, t)
    }, n = null != (s = document.documentElement.closest) ? s : function(e) {
        var t;
        for (t = this; t;) {
            if (t.nodeType === Node.ELEMENT_NODE && i.call(t, e)) return t;
            t = t.parentNode
        }
    }, Turbolinks.defer = function(e) {
        return setTimeout(e, 1)
    }, Turbolinks.throttle = function(n) {
        var i;
        return i = null, function() {
            var e, t;
            return e = 1 <= arguments.length ? c.call(arguments, 0) : [], null != i ? i : i = requestAnimationFrame((t = this, function() {
                return i = null, n.apply(t, e)
            }))
        }
    }, Turbolinks.dispatch = function(e, t) {
        var n, i, o, r, a, s;
        return s = (a = null != t ? t : {}).target, n = a.cancelable, i = a.data, (o = document.createEvent("Events")).initEvent(e, !0, !0 === n), o.data = null != i ? i : {}, o.cancelable && !l && (r = o.preventDefault, o.preventDefault = function() {
            return this.defaultPrevented || Object.defineProperty(this, "defaultPrevented", {
                get: function() {
                    return !0
                }
            }), r.call(this)
        }), (null != s ? s : document).dispatchEvent(o), o
    }, (a = document.createEvent("Events")).initEvent("test", !0, !0), a.preventDefault(), l = a.defaultPrevented, Turbolinks.match = function(e, t) {
        return i.call(e, t)
    }, i = null != (t = null != (o = null != (r = (e = document.documentElement).matchesSelector) ? r : e.webkitMatchesSelector) ? o : e.msMatchesSelector) ? t : e.mozMatchesSelector, Turbolinks.uuid = function() {
        var e, t, n;
        for (n = "", e = t = 1; t <= 36; e = ++t) n += 9 === e || 14 === e || 19 === e || 24 === e ? "-" : 15 === e ? "4" : 20 === e ? (Math.floor(4 * Math.random()) + 8).toString(16) : Math.floor(15 * Math.random()).toString(16);
        return n
    }
}.call(this), function() {
    Turbolinks.Location = function() {
        function e(e) {
            var t, n;
            null == e && (e = ""), (n = document.createElement("a")).href = e.toString(), this.absoluteURL = n.href, (t = n.hash.length) < 2 ? this.requestURL = this.absoluteURL : (this.requestURL = this.absoluteURL.slice(0, -t), this.anchor = n.hash.slice(1))
        }
        var t, n, i, o;
        return e.wrap = function(e) {
            return e instanceof this ? e : new this(e)
        }, e.prototype.getOrigin = function() {
            return this.absoluteURL.split("/", 3).join("/")
        }, e.prototype.getPath = function() {
            var e, t;
            return null != (e = null != (t = this.requestURL.match(/\/\/[^\/]*(\/[^?;]*)/)) ? t[1] : void 0) ? e : "/"
        }, e.prototype.getPathComponents = function() {
            return this.getPath().split("/").slice(1)
        }, e.prototype.getLastPathComponent = function() {
            return this.getPathComponents().slice(-1)[0]
        }, e.prototype.getExtension = function() {
            var e, t;
            return null != (e = null != (t = this.getLastPathComponent().match(/\.[^.]*$/)) ? t[0] : void 0) ? e : ""
        }, e.prototype.isHTML = function() {
            return this.getExtension().match(/^(?:|\.(?:htm|html|xhtml))$/)
        }, e.prototype.isPrefixedBy = function(e) {
            var t;
            return t = n(e), this.isEqualTo(e) || o(this.absoluteURL, t)
        }, e.prototype.isEqualTo = function(e) {
            return this.absoluteURL === (null != e ? e.absoluteURL : void 0)
        }, e.prototype.toCacheKey = function() {
            return this.requestURL
        }, e.prototype.toJSON = function() {
            return this.absoluteURL
        }, e.prototype.toString = function() {
            return this.absoluteURL
        }, e.prototype.valueOf = function() {
            return this.absoluteURL
        }, n = function(e) {
            return t(e.getOrigin() + e.getPath())
        }, t = function(e) {
            return i(e, "/") ? e : e + "/"
        }, o = function(e, t) {
            return e.slice(0, t.length) === t
        }, i = function(e, t) {
            return e.slice(-t.length) === t
        }, e
    }()
}.call(this), function() {
    var i = function(e, t) {
        return function() {
            return e.apply(t, arguments)
        }
    };
    Turbolinks.HttpRequest = function() {
        function e(e, t, n) {
            this.delegate = e, this.requestCanceled = i(this.requestCanceled, this), this.requestTimedOut = i(this.requestTimedOut, this), this.requestFailed = i(this.requestFailed, this), this.requestLoaded = i(this.requestLoaded, this), this.requestProgressed = i(this.requestProgressed, this), this.url = Turbolinks.Location.wrap(t).requestURL, this.referrer = Turbolinks.Location.wrap(n).absoluteURL, this.createXHR()
        }
        return e.NETWORK_FAILURE = 0, e.TIMEOUT_FAILURE = -1, e.timeout = 60, e.prototype.send = function() {
            var e;
            return this.xhr && !this.sent ? (this.notifyApplicationBeforeRequestStart(), this.setProgress(0), this.xhr.send(), this.sent = !0, "function" == typeof(e = this.delegate).requestStarted ? e.requestStarted() : void 0) : void 0
        }, e.prototype.cancel = function() {
            return this.xhr && this.sent ? this.xhr.abort() : void 0
        }, e.prototype.requestProgressed = function(e) {
            return e.lengthComputable ? this.setProgress(e.loaded / e.total) : void 0
        }, e.prototype.requestLoaded = function() {
            return this.endRequest((t = this, function() {
                var e;
                return 200 <= (e = t.xhr.status) && e < 300 ? t.delegate.requestCompletedWithResponse(t.xhr.responseText, t.xhr.getResponseHeader("Turbolinks-Location")) : (t.failed = !0, t.delegate.requestFailedWithStatusCode(t.xhr.status, t.xhr.responseText))
            }));
            var t
        }, e.prototype.requestFailed = function() {
            return this.endRequest((e = this, function() {
                return e.failed = !0, e.delegate.requestFailedWithStatusCode(e.constructor.NETWORK_FAILURE)
            }));
            var e
        }, e.prototype.requestTimedOut = function() {
            return this.endRequest((e = this, function() {
                return e.failed = !0, e.delegate.requestFailedWithStatusCode(e.constructor.TIMEOUT_FAILURE)
            }));
            var e
        }, e.prototype.requestCanceled = function() {
            return this.endRequest()
        }, e.prototype.notifyApplicationBeforeRequestStart = function() {
            return Turbolinks.dispatch("turbolinks:request-start", {
                data: {
                    url: this.url,
                    xhr: this.xhr
                }
            })
        }, e.prototype.notifyApplicationAfterRequestEnd = function() {
            return Turbolinks.dispatch("turbolinks:request-end", {
                data: {
                    url: this.url,
                    xhr: this.xhr
                }
            })
        }, e.prototype.createXHR = function() {
            return this.xhr = new XMLHttpRequest, this.xhr.open("GET", this.url, !0), this.xhr.timeout = 1e3 * this.constructor.timeout, this.xhr.setRequestHeader("Accept", "text/html, application/xhtml+xml"), this.xhr.setRequestHeader("Turbolinks-Referrer", this.referrer), this.xhr.onprogress = this.requestProgressed, this.xhr.onload = this.requestLoaded, this.xhr.onerror = this.requestFailed, this.xhr.ontimeout = this.requestTimedOut, this.xhr.onabort = this.requestCanceled
        }, e.prototype.endRequest = function(e) {
            return this.xhr ? (this.notifyApplicationAfterRequestEnd(), null != e && e.call(this), this.destroy()) : void 0
        }, e.prototype.setProgress = function(e) {
            var t;
            return this.progress = e, "function" == typeof(t = this.delegate).requestProgressed ? t.requestProgressed(this.progress) : void 0
        }, e.prototype.destroy = function() {
            var e;
            return this.setProgress(1), "function" == typeof(e = this.delegate).requestFinished && e.requestFinished(), this.delegate = null, this.xhr = null
        }, e
    }()
}.call(this), function() {
    var n = function(e, t) {
        return function() {
            return e.apply(t, arguments)
        }
    };
    Turbolinks.ProgressBar = function() {
        function e() {
            this.trickle = n(this.trickle, this), this.stylesheetElement = this.createStylesheetElement(), this.progressElement = this.createProgressElement()
        }
        var t;
        return t = 300, e.defaultCSS = ".turbolinks-progress-bar {\n  position: fixed;\n  display: block;\n  top: 0;\n  left: 0;\n  height: 3px;\n  background: #0076ff;\n  z-index: 9999;\n  transition: width " + t + "ms ease-out, opacity " + t / 2 + "ms " + t / 2 + "ms ease-in;\n  transform: translate3d(0, 0, 0);\n}", e.prototype.show = function() {
            return this.visible ? void 0 : (this.visible = !0, this.installStylesheetElement(), this.installProgressElement(), this.startTrickling())
        }, e.prototype.hide = function() {
            return this.visible && !this.hiding ? (this.hiding = !0, this.fadeProgressElement((e = this, function() {
                return e.uninstallProgressElement(), e.stopTrickling(), e.visible = !1, e.hiding = !1
            }))) : void 0;
            var e
        }, e.prototype.setValue = function(e) {
            return this.value = e, this.refresh()
        }, e.prototype.installStylesheetElement = function() {
            return document.head.insertBefore(this.stylesheetElement, document.head.firstChild)
        }, e.prototype.installProgressElement = function() {
            return this.progressElement.style.width = 0, this.progressElement.style.opacity = 1, document.documentElement.insertBefore(this.progressElement, document.body), this.refresh()
        }, e.prototype.fadeProgressElement = function(e) {
            return this.progressElement.style.opacity = 0, setTimeout(e, 1.5 * t)
        }, e.prototype.uninstallProgressElement = function() {
            return this.progressElement.parentNode ? document.documentElement.removeChild(this.progressElement) : void 0
        }, e.prototype.startTrickling = function() {
            return null != this.trickleInterval ? this.trickleInterval : this.trickleInterval = setInterval(this.trickle, t)
        }, e.prototype.stopTrickling = function() {
            return clearInterval(this.trickleInterval), this.trickleInterval = null
        }, e.prototype.trickle = function() {
            return this.setValue(this.value + Math.random() / 100)
        }, e.prototype.refresh = function() {
            return requestAnimationFrame((e = this, function() {
                return e.progressElement.style.width = 10 + 90 * e.value + "%"
            }));
            var e
        }, e.prototype.createStylesheetElement = function() {
            var e;
            return (e = document.createElement("style")).type = "text/css", e.textContent = this.constructor.defaultCSS, e
        }, e.prototype.createProgressElement = function() {
            var e;
            return (e = document.createElement("div")).className = "turbolinks-progress-bar", e
        }, e
    }()
}.call(this), function() {
    var o = function(e, t) {
        return function() {
            return e.apply(t, arguments)
        }
    };
    Turbolinks.BrowserAdapter = function() {
        function e(e) {
            this.controller = e, this.showProgressBar = o(this.showProgressBar, this), this.progressBar = new Turbolinks.ProgressBar
        }
        var n, i, t;
        return t = Turbolinks.HttpRequest, n = t.NETWORK_FAILURE, i = t.TIMEOUT_FAILURE, e.prototype.visitProposedToLocationWithAction = function(e, t) {
            return this.controller.startVisitToLocationWithAction(e, t)
        }, e.prototype.visitStarted = function(e) {
            return e.issueRequest(), e.changeHistory(), e.loadCachedSnapshot()
        }, e.prototype.visitRequestStarted = function(e) {
            return this.progressBar.setValue(0), e.hasCachedSnapshot() || "restore" !== e.action ? this.showProgressBarAfterDelay() : this.showProgressBar()
        }, e.prototype.visitRequestProgressed = function(e) {
            return this.progressBar.setValue(e.progress)
        }, e.prototype.visitRequestCompleted = function(e) {
            return e.loadResponse()
        }, e.prototype.visitRequestFailedWithStatusCode = function(e, t) {
            switch (t) {
                case n:
                case i:
                    return this.reload();
                default:
                    return e.loadResponse()
            }
        }, e.prototype.visitRequestFinished = function() {
            return this.hideProgressBar()
        }, e.prototype.visitCompleted = function(e) {
            return e.followRedirect()
        }, e.prototype.pageInvalidated = function() {
            return this.reload()
        }, e.prototype.showProgressBarAfterDelay = function() {
            return this.progressBarTimeout = setTimeout(this.showProgressBar, this.controller.progressBarDelay)
        }, e.prototype.showProgressBar = function() {
            return this.progressBar.show()
        }, e.prototype.hideProgressBar = function() {
            return this.progressBar.hide(), clearTimeout(this.progressBarTimeout)
        }, e.prototype.reload = function() {
            return window.location.reload()
        }, e
    }()
}.call(this), function() {
    var t = function(e, t) {
        return function() {
            return e.apply(t, arguments)
        }
    };
    Turbolinks.History = function() {
        function e(e) {
            this.delegate = e, this.onPageLoad = t(this.onPageLoad, this), this.onPopState = t(this.onPopState, this)
        }
        return e.prototype.start = function() {
            return this.started ? void 0 : (addEventListener("popstate", this.onPopState, !1), addEventListener("load", this.onPageLoad, !1), this.started = !0)
        }, e.prototype.stop = function() {
            return this.started ? (removeEventListener("popstate", this.onPopState, !1), removeEventListener("load", this.onPageLoad, !1), this.started = !1) : void 0
        }, e.prototype.push = function(e, t) {
            return e = Turbolinks.Location.wrap(e), this.update("push", e, t)
        }, e.prototype.replace = function(e, t) {
            return e = Turbolinks.Location.wrap(e), this.update("replace", e, t)
        }, e.prototype.onPopState = function(e) {
            var t, n, i, o;
            return this.shouldHandlePopState() && (o = null != (n = e.state) ? n.turbolinks : void 0) ? (t = Turbolinks.Location.wrap(window.location), i = o.restorationIdentifier, this.delegate.historyPoppedToLocationWithRestorationIdentifier(t, i)) : void 0
        }, e.prototype.onPageLoad = function() {
            return Turbolinks.defer((e = this, function() {
                return e.pageLoaded = !0
            }));
            var e
        }, e.prototype.shouldHandlePopState = function() {
            return this.pageIsLoaded()
        }, e.prototype.pageIsLoaded = function() {
            return this.pageLoaded || "complete" === document.readyState
        }, e.prototype.update = function(e, t, n) {
            var i;
            return i = {
                turbolinks: {
                    restorationIdentifier: n
                }
            }, history[e + "State"](i, null, t)
        }, e
    }()
}.call(this), function() {
    Turbolinks.Snapshot = function() {
        function e(e) {
            var t, n;
            n = e.head, t = e.body, this.head = null != n ? n : document.createElement("head"), this.body = null != t ? t : document.createElement("body")
        }
        return e.wrap = function(e) {
            return e instanceof this ? e : this.fromHTML(e)
        }, e.fromHTML = function(e) {
            var t;
            return (t = document.createElement("html")).innerHTML = e, this.fromElement(t)
        }, e.fromElement = function(e) {
            return new this({
                head: e.querySelector("head"),
                body: e.querySelector("body")
            })
        }, e.prototype.clone = function() {
            return new e({
                head: this.head.cloneNode(!0),
                body: this.body.cloneNode(!0)
            })
        }, e.prototype.getRootLocation = function() {
            var e, t;
            return t = null != (e = this.getSetting("root")) ? e : "/", new Turbolinks.Location(t)
        }, e.prototype.getCacheControlValue = function() {
            return this.getSetting("cache-control")
        }, e.prototype.getElementForAnchor = function(e) {
            try {
                return this.body.querySelector("[id='" + e + "'], a[name='" + e + "']")
            } catch (t) {}
        }, e.prototype.hasAnchor = function(e) {
            return null != this.getElementForAnchor(e)
        }, e.prototype.isPreviewable = function() {
            return "no-preview" !== this.getCacheControlValue()
        }, e.prototype.isCacheable = function() {
            return "no-cache" !== this.getCacheControlValue()
        }, e.prototype.isVisitable = function() {
            return "reload" !== this.getSetting("visit-control")
        }, e.prototype.getSetting = function(e) {
            var t, n;
            return null != (t = (n = this.head.querySelectorAll("meta[name='turbolinks-" + e + "']"))[n.length - 1]) ? t.getAttribute("content") : void 0
        }, e
    }()
}.call(this), function() {
    var r = [].slice;
    Turbolinks.Renderer = function() {
        function e() {}
        var n;
        return e.render = function(e, t) {
            var n, i, o;
            return i = e, n = t, (o = function(e, t, n) {
                n.prototype = e.prototype;
                var i = new n,
                    o = e.apply(i, t);
                return Object(o) === o ? o : i
            }(this, 3 <= arguments.length ? r.call(arguments, 2) : [], function() {})).delegate = i, o.render(n), o
        }, e.prototype.renderView = function(e) {
            return this.delegate.viewWillRender(this.newBody), e(), this.delegate.viewRendered(this.newBody)
        }, e.prototype.invalidateView = function() {
            return this.delegate.viewInvalidated()
        }, e.prototype.createScriptElement = function(e) {
            var t;
            return "false" === e.getAttribute("data-turbolinks-eval") ? e : ((t = document.createElement("script")).textContent = e.textContent, t.async = !1, n(t, e), t)
        }, n = function(e, t) {
            var n, i, o, r, a, s, l;
            for (s = [], n = 0, i = (r = t.attributes).length; n < i; n++) o = (a = r[n]).name, l = a.value, s.push(e.setAttribute(o, l));
            return s
        }, e
    }()
}.call(this), function() {
    Turbolinks.HeadDetails = function() {
        function e(e) {
            var t, n, i, o, r, a;
            for (this.element = e, this.elements = {}, i = 0, r = (a = this.element.childNodes).length; i < r; i++)(n = a[i]).nodeType === Node.ELEMENT_NODE && (o = n.outerHTML, (null != (t = this.elements)[o] ? t[o] : t[o] = {
                type: l(n),
                tracked: s(n),
                elements: []
            }).elements.push(n))
        }
        var t, n, s, l;
        return e.prototype.hasElementWithKey = function(e) {
            return e in this.elements
        }, e.prototype.getTrackedElementSignature = function() {
            var n;
            return function() {
                var e, t;
                for (n in t = [], e = this.elements) e[n].tracked && t.push(n);
                return t
            }.call(this).join("")
        }, e.prototype.getScriptElementsNotInDetails = function(e) {
            return this.getElementsMatchingTypeNotInDetails("script", e)
        }, e.prototype.getStylesheetElementsNotInDetails = function(e) {
            return this.getElementsMatchingTypeNotInDetails("stylesheet", e)
        }, e.prototype.getElementsMatchingTypeNotInDetails = function(e, t) {
            var n, i, o, r, a, s;
            for (i in a = [], o = this.elements) s = (r = o[i]).type, n = r.elements, s !== e || t.hasElementWithKey(i) || a.push(n[0]);
            return a
        }, e.prototype.getProvisionalElements = function() {
            var e, t, n, i, o, r, a;
            for (t in n = [], i = this.elements) a = (o = i[t]).type, r = o.tracked, e = o.elements, null != a || r ? 1 < e.length && n.push.apply(n, e.slice(1)) : n.push.apply(n, e);
            return n
        }, l = function(e) {
            return t(e) ? "script" : n(e) ? "stylesheet" : void 0
        }, s = function(e) {
            return "reload" === e.getAttribute("data-turbolinks-track")
        }, t = function(e) {
            return "script" === e.tagName.toLowerCase()
        }, n = function(e) {
            var t;
            return "style" === (t = e.tagName.toLowerCase()) || "link" === t && "stylesheet" === e.getAttribute("rel")
        }, e
    }()
}.call(this), function() {
    var n = function(e, t) {
            function n() {
                this.constructor = e
            }
            for (var i in t) o.call(t, i) && (e[i] = t[i]);
            return n.prototype = t.prototype, e.prototype = new n, e.__super__ = t.prototype, e
        },
        o = {}.hasOwnProperty;
    Turbolinks.SnapshotRenderer = function(e) {
        function t(e, t, n) {
            this.currentSnapshot = e, this.newSnapshot = t, this.isPreview = n, this.currentHeadDetails = new Turbolinks.HeadDetails(this.currentSnapshot.head), this.newHeadDetails = new Turbolinks.HeadDetails(this.newSnapshot.head), this.newBody = this.newSnapshot.body
        }
        return n(t, e), t.prototype.render = function(e) {
            return this.shouldRender() ? (this.mergeHead(), this.renderView((t = this, function() {
                return t.replaceBody(), t.isPreview || t.focusFirstAutofocusableElement(), e()
            }))) : this.invalidateView();
            var t
        }, t.prototype.mergeHead = function() {
            return this.copyNewHeadStylesheetElements(), this.copyNewHeadScriptElements(), this.removeCurrentHeadProvisionalElements(), this.copyNewHeadProvisionalElements()
        }, t.prototype.replaceBody = function() {
            return this.activateBodyScriptElements(), this.importBodyPermanentElements(), this.assignNewBody()
        }, t.prototype.shouldRender = function() {
            return this.newSnapshot.isVisitable() && this.trackedElementsAreIdentical()
        }, t.prototype.trackedElementsAreIdentical = function() {
            return this.currentHeadDetails.getTrackedElementSignature() === this.newHeadDetails.getTrackedElementSignature()
        }, t.prototype.copyNewHeadStylesheetElements = function() {
            var e, t, n, i, o;
            for (o = [], t = 0, n = (i = this.getNewHeadStylesheetElements()).length; t < n; t++) e = i[t], o.push(document.head.appendChild(e));
            return o
        }, t.prototype.copyNewHeadScriptElements = function() {
            var e, t, n, i, o;
            for (o = [], t = 0, n = (i = this.getNewHeadScriptElements()).length; t < n; t++) e = i[t], o.push(document.head.appendChild(this.createScriptElement(e)));
            return o
        }, t.prototype.removeCurrentHeadProvisionalElements = function() {
            var e, t, n, i, o;
            for (o = [], t = 0, n = (i = this.getCurrentHeadProvisionalElements()).length; t < n; t++) e = i[t], o.push(document.head.removeChild(e));
            return o
        }, t.prototype.copyNewHeadProvisionalElements = function() {
            var e, t, n, i, o;
            for (o = [], t = 0, n = (i = this.getNewHeadProvisionalElements()).length; t < n; t++) e = i[t], o.push(document.head.appendChild(e));
            return o
        }, t.prototype.importBodyPermanentElements = function() {
            var e, t, n, i, o, r;
            for (r = [], t = 0, n = (i = this.getNewBodyPermanentElements()).length; t < n; t++) o = i[t], (e = this.findCurrentBodyPermanentElement(o)) ? r.push(o.parentNode.replaceChild(e, o)) : r.push(void 0);
            return r
        }, t.prototype.activateBodyScriptElements = function() {
            var e, t, n, i, o, r;
            for (r = [], t = 0, n = (i = this.getNewBodyScriptElements()).length; t < n; t++) o = i[t], e = this.createScriptElement(o), r.push(o.parentNode.replaceChild(e, o));
            return r
        }, t.prototype.assignNewBody = function() {
            return document.body = this.newBody
        }, t.prototype.focusFirstAutofocusableElement = function() {
            var e;
            return null != (e = this.findFirstAutofocusableElement()) ? e.focus() : void 0
        }, t.prototype.getNewHeadStylesheetElements = function() {
            return this.newHeadDetails.getStylesheetElementsNotInDetails(this.currentHeadDetails)
        }, t.prototype.getNewHeadScriptElements = function() {
            return this.newHeadDetails.getScriptElementsNotInDetails(this.currentHeadDetails)
        }, t.prototype.getCurrentHeadProvisionalElements = function() {
            return this.currentHeadDetails.getProvisionalElements()
        }, t.prototype.getNewHeadProvisionalElements = function() {
            return this.newHeadDetails.getProvisionalElements()
        }, t.prototype.getNewBodyPermanentElements = function() {
            return this.newBody.querySelectorAll("[id][data-turbolinks-permanent]")
        }, t.prototype.findCurrentBodyPermanentElement = function(e) {
            return document.body.querySelector("#" + e.id + "[data-turbolinks-permanent]")
        }, t.prototype.getNewBodyScriptElements = function() {
            return this.newBody.querySelectorAll("script")
        }, t.prototype.findFirstAutofocusableElement = function() {
            return document.body.querySelector("[autofocus]")
        }, t
    }(Turbolinks.Renderer)
}.call(this), function() {
    var n = function(e, t) {
            function n() {
                this.constructor = e
            }
            for (var i in t) o.call(t, i) && (e[i] = t[i]);
            return n.prototype = t.prototype, e.prototype = new n, e.__super__ = t.prototype, e
        },
        o = {}.hasOwnProperty;
    Turbolinks.ErrorRenderer = function(e) {
        function t(e) {
            this.html = e
        }
        return n(t, e), t.prototype.render = function(e) {
            return this.renderView((t = this, function() {
                return t.replaceDocumentHTML(), t.activateBodyScriptElements(), e()
            }));
            var t
        }, t.prototype.replaceDocumentHTML = function() {
            return document.documentElement.innerHTML = this.html
        }, t.prototype.activateBodyScriptElements = function() {
            var e, t, n, i, o, r;
            for (r = [], t = 0, n = (i = this.getScriptElements()).length; t < n; t++) o = i[t], e = this.createScriptElement(o), r.push(o.parentNode.replaceChild(e, o));
            return r
        }, t.prototype.getScriptElements = function() {
            return document.documentElement.querySelectorAll("script")
        }, t
    }(Turbolinks.Renderer)
}.call(this), function() {
    Turbolinks.View = function() {
        function e(e) {
            this.delegate = e, this.element = document.documentElement
        }
        return e.prototype.getRootLocation = function() {
            return this.getSnapshot().getRootLocation()
        }, e.prototype.getElementForAnchor = function(e) {
            return this.getSnapshot().getElementForAnchor(e)
        }, e.prototype.getSnapshot = function() {
            return Turbolinks.Snapshot.fromElement(this.element)
        }, e.prototype.render = function(e, t) {
            var n, i, o;
            return o = e.snapshot, n = e.error, i = e.isPreview, this.markAsPreview(i), null != o ? this.renderSnapshot(o, i, t) : this.renderError(n, t)
        }, e.prototype.markAsPreview = function(e) {
            return e ? this.element.setAttribute("data-turbolinks-preview", "") : this.element.removeAttribute("data-turbolinks-preview")
        }, e.prototype.renderSnapshot = function(e, t, n) {
            return Turbolinks.SnapshotRenderer.render(this.delegate, n, this.getSnapshot(), Turbolinks.Snapshot.wrap(e), t)
        }, e.prototype.renderError = function(e, t) {
            return Turbolinks.ErrorRenderer.render(this.delegate, t, e)
        }, e
    }()
}.call(this), function() {
    var t = function(e, t) {
        return function() {
            return e.apply(t, arguments)
        }
    };
    Turbolinks.ScrollManager = function() {
        function e(e) {
            this.delegate = e, this.onScroll = t(this.onScroll, this), this.onScroll = Turbolinks.throttle(this.onScroll)
        }
        return e.prototype.start = function() {
            return this.started ? void 0 : (addEventListener("scroll", this.onScroll, !1), this.onScroll(), this.started = !0)
        }, e.prototype.stop = function() {
            return this.started ? (removeEventListener("scroll", this.onScroll, !1), this.started = !1) : void 0
        }, e.prototype.scrollToElement = function(e) {
            return e.scrollIntoView()
        }, e.prototype.scrollToPosition = function(e) {
            var t, n;
            return t = e.x, n = e.y, window.scrollTo(t, n)
        }, e.prototype.onScroll = function() {
            return this.updatePosition({
                x: window.pageXOffset,
                y: window.pageYOffset
            })
        }, e.prototype.updatePosition = function(e) {
            var t;
            return this.position = e, null != (t = this.delegate) ? t.scrollPositionChanged(this.position) : void 0
        }, e
    }()
}.call(this), function() {
    Turbolinks.SnapshotCache = function() {
        function e(e) {
            this.size = e, this.keys = [], this.snapshots = {}
        }
        var i;
        return e.prototype.has = function(e) {
            return i(e) in this.snapshots
        }, e.prototype.get = function(e) {
            var t;
            if (this.has(e)) return t = this.read(e), this.touch(e), t
        }, e.prototype.put = function(e, t) {
            return this.write(e, t), this.touch(e), t
        }, e.prototype.read = function(e) {
            var t;
            return t = i(e), this.snapshots[t]
        }, e.prototype.write = function(e, t) {
            var n;
            return n = i(e), this.snapshots[n] = t
        }, e.prototype.touch = function(e) {
            var t, n;
            return n = i(e), -1 < (t = this.keys.indexOf(n)) && this.keys.splice(t, 1), this.keys.unshift(n), this.trim()
        }, e.prototype.trim = function() {
            var e, t, n, i, o;
            for (o = [], e = 0, n = (i = this.keys.splice(this.size)).length; e < n; e++) t = i[e], o.push(delete this.snapshots[t]);
            return o
        }, i = function(e) {
            return Turbolinks.Location.wrap(e).toCacheKey()
        }, e
    }()
}.call(this), function() {
    var i = function(e, t) {
        return function() {
            return e.apply(t, arguments)
        }
    };
    Turbolinks.Visit = function() {
        function e(e, t, n) {
            this.controller = e, this.action = n, this.performScroll = i(this.performScroll, this), this.identifier = Turbolinks.uuid(), this.location = Turbolinks.Location.wrap(t), this.adapter = this.controller.adapter, this.state = "initialized", this.timingMetrics = {}
        }
        var n;
        return e.prototype.start = function() {
            return "initialized" === this.state ? (this.recordTimingMetric("visitStart"), this.state = "started", this.adapter.visitStarted(this)) : void 0
        }, e.prototype.cancel = function() {
            var e;
            return "started" === this.state ? (null != (e = this.request) && e.cancel(), this.cancelRender(), this.state = "canceled") : void 0
        }, e.prototype.complete = function() {
            var e;
            return "started" === this.state ? (this.recordTimingMetric("visitEnd"), this.state = "completed", "function" == typeof(e = this.adapter).visitCompleted && e.visitCompleted(this), this.controller.visitCompleted(this)) : void 0
        }, e.prototype.fail = function() {
            var e;
            return "started" === this.state ? (this.state = "failed", "function" == typeof(e = this.adapter).visitFailed ? e.visitFailed(this) : void 0) : void 0
        }, e.prototype.changeHistory = function() {
            var e, t;
            return this.historyChanged ? void 0 : (e = this.location.isEqualTo(this.referrer) ? "replace" : this.action, t = n(e), this.controller[t](this.location, this.restorationIdentifier), this.historyChanged = !0)
        }, e.prototype.issueRequest = function() {
            return this.shouldIssueRequest() && null == this.request ? (this.progress = 0, this.request = new Turbolinks.HttpRequest(this, this.location, this.referrer), this.request.send()) : void 0
        }, e.prototype.getCachedSnapshot = function() {
            var e;
            return !(e = this.controller.getCachedSnapshotForLocation(this.location)) || null != this.location.anchor && !e.hasAnchor(this.location.anchor) || "restore" !== this.action && !e.isPreviewable() ? void 0 : e
        }, e.prototype.hasCachedSnapshot = function() {
            return null != this.getCachedSnapshot()
        }, e.prototype.loadCachedSnapshot = function() {
            var t, n;
            return (n = this.getCachedSnapshot()) ? (t = this.shouldIssueRequest(), this.render(function() {
                var e;
                return this.cacheSnapshot(), this.controller.render({
                    snapshot: n,
                    isPreview: t
                }, this.performScroll), "function" == typeof(e = this.adapter).visitRendered && e.visitRendered(this), t ? void 0 : this.complete()
            })) : void 0
        }, e.prototype.loadResponse = function() {
            return null != this.response ? this.render(function() {
                var e, t;
                return this.cacheSnapshot(), this.request.failed ? (this.controller.render({
                    error: this.response
                }, this.performScroll), "function" == typeof(e = this.adapter).visitRendered && e.visitRendered(this), this.fail()) : (this.controller.render({
                    snapshot: this.response
                }, this.performScroll), "function" == typeof(t = this.adapter).visitRendered && t.visitRendered(this), this.complete())
            }) : void 0
        }, e.prototype.followRedirect = function() {
            return this.redirectedToLocation && !this.followedRedirect ? (this.location = this.redirectedToLocation, this.controller.replaceHistoryWithLocationAndRestorationIdentifier(this.redirectedToLocation, this.restorationIdentifier), this.followedRedirect = !0) : void 0
        }, e.prototype.requestStarted = function() {
            var e;
            return this.recordTimingMetric("requestStart"), "function" == typeof(e = this.adapter).visitRequestStarted ? e.visitRequestStarted(this) : void 0
        }, e.prototype.requestProgressed = function(e) {
            var t;
            return this.progress = e, "function" == typeof(t = this.adapter).visitRequestProgressed ? t.visitRequestProgressed(this) : void 0
        }, e.prototype.requestCompletedWithResponse = function(e, t) {
            return this.response = e, null != t && (this.redirectedToLocation = Turbolinks.Location.wrap(t)), this.adapter.visitRequestCompleted(this)
        }, e.prototype.requestFailedWithStatusCode = function(e, t) {
            return this.response = t, this.adapter.visitRequestFailedWithStatusCode(this, e)
        }, e.prototype.requestFinished = function() {
            var e;
            return this.recordTimingMetric("requestEnd"), "function" == typeof(e = this.adapter).visitRequestFinished ? e.visitRequestFinished(this) : void 0
        }, e.prototype.performScroll = function() {
            return this.scrolled ? void 0 : ("restore" === this.action ? this.scrollToRestoredPosition() || this.scrollToTop() : this.scrollToAnchor() || this.scrollToTop(), this.scrolled = !0)
        }, e.prototype.scrollToRestoredPosition = function() {
            var e, t;
            return null != (e = null != (t = this.restorationData) ? t.scrollPosition : void 0) ? (this.controller.scrollToPosition(e), !0) : void 0
        }, e.prototype.scrollToAnchor = function() {
            return null != this.location.anchor ? (this.controller.scrollToAnchor(this.location.anchor), !0) : void 0
        }, e.prototype.scrollToTop = function() {
            return this.controller.scrollToPosition({
                x: 0,
                y: 0
            })
        }, e.prototype.recordTimingMetric = function(e) {
            var t;
            return null != (t = this.timingMetrics)[e] ? t[e] : t[e] = (new Date).getTime()
        }, e.prototype.getTimingMetrics = function() {
            return Turbolinks.copyObject(this.timingMetrics)
        }, n = function(e) {
            switch (e) {
                case "replace":
                    return "replaceHistoryWithLocationAndRestorationIdentifier";
                case "advance":
                case "restore":
                    return "pushHistoryWithLocationAndRestorationIdentifier"
            }
        }, e.prototype.shouldIssueRequest = function() {
            return "restore" !== this.action || !this.hasCachedSnapshot()
        }, e.prototype.cacheSnapshot = function() {
            return this.snapshotCached ? void 0 : (this.controller.cacheSnapshot(), this.snapshotCached = !0)
        }, e.prototype.render = function(e) {
            return this.cancelRender(), this.frame = requestAnimationFrame((t = this, function() {
                return t.frame = null, e.call(t)
            }));
            var t
        }, e.prototype.cancelRender = function() {
            return this.frame ? cancelAnimationFrame(this.frame) : void 0
        }, e
    }()
}.call(this), function() {
    var t = function(e, t) {
        return function() {
            return e.apply(t, arguments)
        }
    };
    Turbolinks.Controller = function() {
        function e() {
            this.clickBubbled = t(this.clickBubbled, this), this.clickCaptured = t(this.clickCaptured, this), this.pageLoaded = t(this.pageLoaded, this), this.history = new Turbolinks.History(this), this.view = new Turbolinks.View(this), this.scrollManager = new Turbolinks.ScrollManager(this), this.restorationData = {}, this.clearCache(), this.setProgressBarDelay(500)
        }
        return e.prototype.start = function() {
            return Turbolinks.supported && !this.started ? (addEventListener("click", this.clickCaptured, !0), addEventListener("DOMContentLoaded", this.pageLoaded, !1), this.scrollManager.start(), this.startHistory(), this.started = !0, this.enabled = !0) : void 0
        }, e.prototype.disable = function() {
            return this.enabled = !1
        }, e.prototype.stop = function() {
            return this.started ? (removeEventListener("click", this.clickCaptured, !0), removeEventListener("DOMContentLoaded", this.pageLoaded, !1), this.scrollManager.stop(), this.stopHistory(), this.started = !1) : void 0
        }, e.prototype.clearCache = function() {
            return this.cache = new Turbolinks.SnapshotCache(10)
        }, e.prototype.visit = function(e, t) {
            var n, i;
            return null == t && (t = {}), e = Turbolinks.Location.wrap(e), this.applicationAllowsVisitingLocation(e) ? this.locationIsVisitable(e) ? (n = null != (i = t.action) ? i : "advance", this.adapter.visitProposedToLocationWithAction(e, n)) : window.location = e : void 0
        }, e.prototype.startVisitToLocationWithAction = function(e, t, n) {
            var i;
            return Turbolinks.supported ? (i = this.getRestorationDataForIdentifier(n), this.startVisit(e, t, {
                restorationData: i
            })) : window.location = e
        }, e.prototype.setProgressBarDelay = function(e) {
            return this.progressBarDelay = e
        }, e.prototype.startHistory = function() {
            return this.location = Turbolinks.Location.wrap(window.location), this.restorationIdentifier = Turbolinks.uuid(), this.history.start(), this.history.replace(this.location, this.restorationIdentifier)
        }, e.prototype.stopHistory = function() {
            return this.history.stop()
        }, e.prototype.pushHistoryWithLocationAndRestorationIdentifier = function(e, t) {
            return this.restorationIdentifier = t, this.location = Turbolinks.Location.wrap(e), this.history.push(this.location, this.restorationIdentifier)
        }, e.prototype.replaceHistoryWithLocationAndRestorationIdentifier = function(e, t) {
            return this.restorationIdentifier = t, this.location = Turbolinks.Location.wrap(e), this.history.replace(this.location, this.restorationIdentifier)
        }, e.prototype.historyPoppedToLocationWithRestorationIdentifier = function(e, t) {
            var n;
            return this.restorationIdentifier = t, this.enabled ? (n = this.getRestorationDataForIdentifier(this.restorationIdentifier), this.startVisit(e, "restore", {
                restorationIdentifier: this.restorationIdentifier,
                restorationData: n,
                historyChanged: !0
            }), this.location = Turbolinks.Location.wrap(e)) : this.adapter.pageInvalidated()
        }, e.prototype.getCachedSnapshotForLocation = function(e) {
            var t;
            return (t = this.cache.get(e)) ? t.clone() : void 0
        }, e.prototype.shouldCacheSnapshot = function() {
            return this.view.getSnapshot().isCacheable()
        }, e.prototype.cacheSnapshot = function() {
            var e;
            return this.shouldCacheSnapshot() ? (this.notifyApplicationBeforeCachingSnapshot(), e = this.view.getSnapshot(), this.cache.put(this.lastRenderedLocation, e.clone())) : void 0
        }, e.prototype.scrollToAnchor = function(e) {
            var t;
            return (t = this.view.getElementForAnchor(e)) ? this.scrollToElement(t) : this.scrollToPosition({
                x: 0,
                y: 0
            })
        }, e.prototype.scrollToElement = function(e) {
            return this.scrollManager.scrollToElement(e)
        }, e.prototype.scrollToPosition = function(e) {
            return this.scrollManager.scrollToPosition(e)
        }, e.prototype.scrollPositionChanged = function(e) {
            return this.getCurrentRestorationData().scrollPosition = e
        }, e.prototype.render = function(e, t) {
            return this.view.render(e, t)
        }, e.prototype.viewInvalidated = function() {
            return this.adapter.pageInvalidated()
        }, e.prototype.viewWillRender = function(e) {
            return this.notifyApplicationBeforeRender(e)
        }, e.prototype.viewRendered = function() {
            return this.lastRenderedLocation = this.currentVisit.location, this.notifyApplicationAfterRender()
        }, e.prototype.pageLoaded = function() {
            return this.lastRenderedLocation = this.location, this.notifyApplicationAfterPageLoad()
        }, e.prototype.clickCaptured = function() {
            return removeEventListener("click", this.clickBubbled, !1), addEventListener("click", this.clickBubbled, !1)
        }, e.prototype.clickBubbled = function(e) {
            var t, n, i;
            return this.enabled && this.clickEventIsSignificant(e) && (n = this.getVisitableLinkForNode(e.target)) && (i = this.getVisitableLocationForLink(n)) && this.applicationAllowsFollowingLinkToLocation(n, i) ? (e.preventDefault(), t = this.getActionForLink(n), this.visit(i, {
                action: t
            })) : void 0
        }, e.prototype.applicationAllowsFollowingLinkToLocation = function(e, t) {
            return !this.notifyApplicationAfterClickingLinkToLocation(e, t).defaultPrevented
        }, e.prototype.applicationAllowsVisitingLocation = function(e) {
            return !this.notifyApplicationBeforeVisitingLocation(e).defaultPrevented
        }, e.prototype.notifyApplicationAfterClickingLinkToLocation = function(e, t) {
            return Turbolinks.dispatch("turbolinks:click", {
                target: e,
                data: {
                    url: t.absoluteURL
                },
                cancelable: !0
            })
        }, e.prototype.notifyApplicationBeforeVisitingLocation = function(e) {
            return Turbolinks.dispatch("turbolinks:before-visit", {
                data: {
                    url: e.absoluteURL
                },
                cancelable: !0
            })
        }, e.prototype.notifyApplicationAfterVisitingLocation = function(e) {
            return Turbolinks.dispatch("turbolinks:visit", {
                data: {
                    url: e.absoluteURL
                }
            })
        }, e.prototype.notifyApplicationBeforeCachingSnapshot = function() {
            return Turbolinks.dispatch("turbolinks:before-cache")
        }, e.prototype.notifyApplicationBeforeRender = function(e) {
            return Turbolinks.dispatch("turbolinks:before-render", {
                data: {
                    newBody: e
                }
            })
        }, e.prototype.notifyApplicationAfterRender = function() {
            return Turbolinks.dispatch("turbolinks:render")
        }, e.prototype.notifyApplicationAfterPageLoad = function(e) {
            return null == e && (e = {}), Turbolinks.dispatch("turbolinks:load", {
                data: {
                    url: this.location.absoluteURL,
                    timing: e
                }
            })
        }, e.prototype.startVisit = function(e, t, n) {
            var i;
            return null != (i = this.currentVisit) && i.cancel(), this.currentVisit = this.createVisit(e, t, n), this.currentVisit.start(), this.notifyApplicationAfterVisitingLocation(e)
        }, e.prototype.createVisit = function(e, t, n) {
            var i, o, r, a, s;
            return a = (o = null != n ? n : {}).restorationIdentifier, r = o.restorationData, i = o.historyChanged, (s = new Turbolinks.Visit(this, e, t)).restorationIdentifier = null != a ? a : Turbolinks.uuid(), s.restorationData = Turbolinks.copyObject(r), s.historyChanged = i, s.referrer = this.location, s
        }, e.prototype.visitCompleted = function(e) {
            return this.notifyApplicationAfterPageLoad(e.getTimingMetrics())
        }, e.prototype.clickEventIsSignificant = function(e) {
            return !(e.defaultPrevented || e.target.isContentEditable || 1 < e.which || e.altKey || e.ctrlKey || e.metaKey || e.shiftKey)
        }, e.prototype.getVisitableLinkForNode = function(e) {
            return this.nodeIsVisitable(e) ? Turbolinks.closest(e, "a[href]:not([target]):not([download])") : void 0
        }, e.prototype.getVisitableLocationForLink = function(e) {
            var t;
            return t = new Turbolinks.Location(e.getAttribute("href")), this.locationIsVisitable(t) ? t : void 0
        }, e.prototype.getActionForLink = function(e) {
            var t;
            return null != (t = e.getAttribute("data-turbolinks-action")) ? t : "advance"
        }, e.prototype.nodeIsVisitable = function(e) {
            var t;
            return !(t = Turbolinks.closest(e, "[data-turbolinks]")) || "false" !== t.getAttribute("data-turbolinks")
        }, e.prototype.locationIsVisitable = function(e) {
            return e.isPrefixedBy(this.view.getRootLocation()) && e.isHTML()
        }, e.prototype.getCurrentRestorationData = function() {
            return this.getRestorationDataForIdentifier(this.restorationIdentifier)
        }, e.prototype.getRestorationDataForIdentifier = function(e) {
            var t;
            return null != (t = this.restorationData)[e] ? t[e] : t[e] = {}
        }, e
    }()
}.call(this), function() {
    !
        function() {
            var e, t;
            if ((e = t = document.currentScript) && !t.hasAttribute("data-turbolinks-suppress-warning")) for (; e = e.parentNode;) if (e === document.body) return console.warn("You are loading Turbolinks from a <script> element inside the <body> element. This is probably not what you meant to do!\n\nLoad your application\u2019s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\nFor more information, see: https://github.com/turbolinks/turbolinks#working-with-script-elements\n\n\u2014\u2014\nSuppress this warning by adding a `data-turbolinks-suppress-warning` attribute to: %s", t.outerHTML)
        }()
}.call(this), function() {
    var e, t, n;
    Turbolinks.start = function() {
        return t() ? (null == Turbolinks.controller && (Turbolinks.controller = e()), Turbolinks.controller.start()) : void 0
    }, t = function() {
        return null == window.Turbolinks && (window.Turbolinks = Turbolinks), n()
    }, e = function() {
        var e;
        return (e = new Turbolinks.Controller).adapter = new Turbolinks.BrowserAdapter(e), e
    }, (n = function() {
        return window.Turbolinks === Turbolinks
    })() && Turbolinks.start()
}.call(this), function(e, t) {
    "function" == typeof define && define.amd ? define("i18n", function() {
        return t(e)
    }) : "object" == typeof module && module.exports ? module.exports = t(e) : e.I18n = t(e)
}(this, function(e) {
    "use strict";
    var g = e && e.I18n || {},
        o = Array.prototype.slice,
        v = function(e) {
            return ("0" + e.toString()).substr(-2)
        },
        c = function(e, t) {
            return i("round", e, -t).toFixed(t)
        },
        l = function(e) {
            var t = typeof e;
            return "function" === t || "object" === t
        },
        n = function(e) {
            return "function" === typeof e
        },
        u = function(e) {
            return null != e
        },
        r = function(e) {
            return Array.isArray ? Array.isArray(e) : "[object Array]" === Object.prototype.toString.call(e)
        },
        a = function(e) {
            return "string" == typeof value || "[object String]" === Object.prototype.toString.call(e)
        },
        s = function(e) {
            return "number" == typeof e || "[object Number]" === Object.prototype.toString.call(e)
        },
        d = function(e) {
            return !0 === e || !1 === e
        },
        i = function(e, t, n) {
            return void 0 === n || 0 == +n ? Math[e](t) : (t = +t, n = +n, isNaN(t) || "number" != typeof n || n % 1 != 0 ? NaN : (t = t.toString().split("e"), +((t = (t = Math[e](+(t[0] + "e" + (t[1] ? +t[1] - n : -n)))).toString().split("e"))[0] + "e" + (t[1] ? +t[1] + n : n))))
        },
        f = function(e, t) {
            return n(e) ? e(t) : e
        },
        h = function(e, t) {
            var n, i;
            for (n in t) t.hasOwnProperty(n) && (i = t[n], a(i) || s(i) || d(i) || r(i) ? e[n] = i : (null == e[n] && (e[n] = {}), h(e[n], i)));
            return e
        },
        y = {
            day_names: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
            abbr_day_names: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
            month_names: [null, "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
            abbr_month_names: [null, "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
            meridian: ["AM", "PM"]
        },
        p = {
            precision: 3,
            separator: ".",
            delimiter: ",",
            strip_insignificant_zeros: !1
        },
        m = {
            unit: "$",
            precision: 2,
            format: "%u%n",
            sign_first: !0,
            delimiter: ",",
            separator: "."
        },
        _ = {
            unit: "%",
            precision: 3,
            format: "%n%u",
            separator: ".",
            delimiter: ""
        },
        b = [null, "kb", "mb", "gb", "tb"],
        t = {
            defaultLocale: "en",
            locale: "en",
            defaultSeparator: ".",
            placeholder: /(?:\{\{|%\{)(.*?)(?:\}\}?)/gm,
            fallbacks: !1,
            translations: {},
            missingBehaviour: "message",
            missingTranslationPrefix: ""
        };
    return g.reset = function() {
        var e;
        for (e in t) this[e] = t[e]
    }, g.initializeOptions = function() {
        var e;
        for (e in t) u(this[e]) || (this[e] = t[e])
    }, g.initializeOptions(), g.locales = {}, g.locales.get = function(e) {
        var t = this[e] || this[g.locale] || this["default"];
        return n(t) && (t = t(e)), !1 === r(t) && (t = [t]), t
    }, g.locales["default"] = function(e) {
        var t = [],
            o = [];
        return e && t.push(e), !e && g.locale && t.push(g.locale), g.fallbacks && g.defaultLocale && t.push(g.defaultLocale), t.forEach(function(t) {
            var e = t.split("-"),
                n = null,
                i = null;
            3 === e.length ? (n = [e[0], e[1]].join("-"), i = e[0]) : 2 === e.length && (n = e[0]), -1 === o.indexOf(t) && o.push(t), g.fallbacks && [n, i].forEach(function(e) {
                null != e && e !== t && -1 === o.indexOf(e) && o.push(e)
            })
        }), t.length || t.push("en"), o
    }, g.pluralization = {}, g.pluralization.get = function(e) {
        return this[e] || this[g.locale] || this["default"]
    }, g.pluralization["default"] = function(e) {
        switch (e) {
            case 0:
                return ["zero", "other"];
            case 1:
                return ["one"];
            default:
                return ["other"]
        }
    }, g.currentLocale = function() {
        return this.locale || this.defaultLocale
    }, g.isSet = u, g.lookup = function(e, t) {
        t = t || {};
        var n, i, o, r, a = this.locales.get(t.locale).slice();
        a[0];
        for (o = this.getFullScope(e, t); a.length;) if (n = a.shift(), i = o.split(this.defaultSeparator), r = this.translations[n]) {
            for (; i.length && (r = r[i.shift()]) !== undefined && null !== r;);
            if (r !== undefined && null !== r) return r
        }
        if (u(t.defaultValue)) return f(t.defaultValue, e)
    }, g.pluralizationLookupWithoutFallback = function(e, t, n) {
        var i, o, r = this.pluralization.get(t)(e);
        if (l(n)) for (; r.length;) if (i = r.shift(), u(n[i])) {
            o = n[i];
            break
        }
        return o
    }, g.pluralizationLookup = function(e, t, n) {
        n = n || {};
        var i, o, r, a, s = this.locales.get(n.locale).slice();
        s[0];
        for (t = this.getFullScope(t, n); s.length;) if (i = s.shift(), o = t.split(this.defaultSeparator), r = this.translations[i]) {
            for (; o.length && (r = r[o.shift()], l(r));) 0 == o.length && (a = this.pluralizationLookupWithoutFallback(e, i, r));
            if (null != a && a != undefined) break
        }
        return null != a && a != undefined || u(n.defaultValue) && (a = l(n.defaultValue) ? this.pluralizationLookupWithoutFallback(e, n.locale, n.defaultValue) : n.defaultValue, r = n.defaultValue), {
            message: a,
            translations: r
        }
    }, g.meridian = function() {
        var e = this.lookup("time"),
            t = this.lookup("date");
        return e && e.am && e.pm ? [e.am, e.pm] : t && t.meridian ? t.meridian : y.meridian
    }, g.prepareOptions = function() {
        for (var e, t = o.call(arguments), n = {}; t.length;) if ("object" == typeof(e = t.shift())) for (var i in e) e.hasOwnProperty(i) && (u(n[i]) || (n[i] = e[i]));
        return n
    }, g.createTranslationOptions = function(e, t) {
        var n = [{
            scope: e
        }];
        return u(t.defaults) && (n = n.concat(t.defaults)), u(t.defaultValue) && n.push({
            message: t.defaultValue
        }), n
    }, g.translate = function(t, e) {
        e = e || {};
        var n, i = this.createTranslationOptions(t, e),
            o = this.prepareOptions(e);
        return delete o.defaultValue, i.some(function(e) {
            if (u(e.scope) ? n = this.lookup(e.scope, o) : u(e.message) && (n = f(e.message, t)), n !== undefined && null !== n) return !0
        }, this) ? ("string" == typeof n ? n = this.interpolate(n, e) : l(n) && u(e.count) && (n = this.pluralize(e.count, t, e)), n) : this.missingTranslation(t, e)
    }, g.interpolate = function(e, t) {
        t = t || {};
        var n, i, o, r, a = e.match(this.placeholder);
        if (!a) return e;
        for (; a.length;) i = (n = a.shift()).replace(this.placeholder, "$1"), r = u(t[i]) ? t[i].toString().replace(/\$/gm, "_#$#_") : i in t ? this.nullPlaceholder(n, e, t) : this.missingPlaceholder(n, e, t), o = new RegExp(n.replace(/\{/gm, "\\{").replace(/\}/gm, "\\}")), e = e.replace(o, r);
        return e.replace(/_#\$#_/g, "$")
    }, g.pluralize = function(e, t, n) {
        var i, o;
        return n = this.prepareOptions({
            count: String(e)
        }, n), (o = this.pluralizationLookup(e, t, n)).translations == undefined || null == o.translations ? this.missingTranslation(t, n) : o.message != undefined && null != o.message ? this.interpolate(o.message, n) : (i = this.pluralization.get(n.locale), this.missingTranslation(t + "." + i(e)[0], n))
    }, g.missingTranslation = function(e, t) {
        if ("guess" == this.missingBehaviour) {
            var n = e.split(".").slice(-1)[0];
            return (0 < this.missingTranslationPrefix.length ? this.missingTranslationPrefix : "") + n.replace("_", " ").replace(/([a-z])([A-Z])/g, function(e, t, n) {
                    return t + " " + n.toLowerCase()
                })
        }
        return '[missing "' + [null != t && null != t.locale ? t.locale : this.currentLocale(), this.getFullScope(e, t)].join(this.defaultSeparator) + '" translation]'
    }, g.missingPlaceholder = function(e) {
        return "[missing " + e + " value]"
    }, g.nullPlaceholder = function() {
        return g.missingPlaceholder.apply(g, arguments)
    }, g.toNumber = function(e, t) {
        t = this.prepareOptions(t, this.lookup("number.format"), p);
        var n, i, o = e < 0,
            r = c(Math.abs(e), t.precision).toString().split("."),
            a = [],
            s = t.format || "%n",
            l = o ? "-" : "";
        for (e = r[0], n = r[1]; 0 < e.length;) a.unshift(e.substr(Math.max(0, e.length - 3), 3)), e = e.substr(0, e.length - 3);
        return i = a.join(t.delimiter), t.strip_insignificant_zeros && n && (n = n.replace(/0+$/, "")), 0 < t.precision && n && (i += t.separator + n), i = (s = t.sign_first ? "%s" + s : s.replace("%n", "%s%n")).replace("%u", t.unit).replace("%n", i).replace("%s", l)
    }, g.toCurrency = function(e, t) {
        return t = this.prepareOptions(t, this.lookup("number.currency.format"), this.lookup("number.format"), m), this.toNumber(e, t)
    }, g.localize = function(e, t, n) {
        switch (n || (n = {}), e) {
            case "currency":
                return this.toCurrency(t);
            case "number":
                return e = this.lookup("number.format"), this.toNumber(t, e);
            case "percentage":
                return this.toPercentage(t);
            default:
                var i;
                return i = e.match(/^(date|time)/) ? this.toTime(e, t) : t.toString(), this.interpolate(i, n)
        }
    }, g.parseDate = function(e) {
        var t, n, i;
        if ("object" == typeof e) return e;
        if (t = e.toString().match(/(\d{4})-(\d{2})-(\d{2})(?:[ T](\d{2}):(\d{2}):(\d{2})([\.,]\d{1,3})?)?(Z|\+00:?00)?/)) {
            for (var o = 1; o <= 6; o++) t[o] = parseInt(t[o], 10) || 0;
            t[2] -= 1, i = t[7] ? 1e3 * ("0" + t[7]) : null, n = t[8] ? new Date(Date.UTC(t[1], t[2], t[3], t[4], t[5], t[6], i)) : new Date(t[1], t[2], t[3], t[4], t[5], t[6], i)
        } else "number" == typeof e ? (n = new Date).setTime(e) : e.match(/([A-Z][a-z]{2}) ([A-Z][a-z]{2}) (\d+) (\d+:\d+:\d+) ([+-]\d+) (\d+)/) ? (n = new Date).setTime(Date.parse([RegExp.$1, RegExp.$2, RegExp.$3, RegExp.$6, RegExp.$4, RegExp.$5].join(" "))) : (e.match(/\d+ \d+:\d+:\d+ [+-]\d+ \d+/), (n = new Date).setTime(Date.parse(e)));
        return n
    }, g.strftime = function(e, t) {
        var n = this.lookup("date"),
            i = g.meridian();
        if (n || (n = {}), n = this.prepareOptions(n, y), isNaN(e.getTime())) throw new Error("I18n.strftime() requires a valid date object, but received an invalid date.");
        var o = e.getDay(),
            r = e.getDate(),
            a = e.getFullYear(),
            s = e.getMonth() + 1,
            l = e.getHours(),
            c = l,
            u = 11 < l ? 1 : 0,
            d = e.getSeconds(),
            f = e.getMinutes(),
            h = e.getTimezoneOffset(),
            p = Math.floor(Math.abs(h / 60)),
            m = Math.abs(h) - 60 * p,
            _ = (0 < h ? "-" : "+") + (p.toString().length < 2 ? "0" + p : p) + (m.toString().length < 2 ? "0" + m : m);
        return 12 < c ? c -= 12 : 0 === c && (c = 12), t = (t = (t = (t = (t = (t = (t = (t = (t = (t = (t = (t = (t = (t = (t = (t = (t = (t = (t = (t = (t = (t = (t = t.replace("%a", n.abbr_day_names[o])).replace("%A", n.day_names[o])).replace("%b", n.abbr_month_names[s])).replace("%B", n.month_names[s])).replace("%d", v(r))).replace("%e", r)).replace("%-d", r)).replace("%H", v(l))).replace("%-H", l)).replace("%I", v(c))).replace("%-I", c)).replace("%m", v(s))).replace("%-m", s)).replace("%M", v(f))).replace("%-M", f)).replace("%p", i[u])).replace("%S", v(d))).replace("%-S", d)).replace("%w", o)).replace("%y", v(a))).replace("%-y", v(a).replace(/^0+/, ""))).replace("%Y", a)).replace("%z", _)
    }, g.toTime = function(e, t) {
        var n = this.parseDate(t),
            i = this.lookup(e);
        return n.toString().match(/invalid/i) ? n.toString() : i ? this.strftime(n, i) : n.toString()
    }, g.toPercentage = function(e, t) {
        return t = this.prepareOptions(t, this.lookup("number.percentage.format"), this.lookup("number.format"), _), this.toNumber(e, t)
    }, g.toHumanSize = function(e, t) {
        for (var n, i, o = 1024, r = e, a = 0; o <= r && a < 4;) r /= o, a += 1;
        return 0 === a ? (n = this.t("number.human.storage_units.units.byte", {
            count: r
        }), i = 0) : (n = this.t("number.human.storage_units.units." + b[a]), i = r - Math.floor(r) == 0 ? 0 : 1), t = this.prepareOptions(t, {
            unit: n,
            precision: i,
            format: "%n%u",
            delimiter: ""
        }), this.toNumber(r, t)
    }, g.getFullScope = function(e, t) {
        return t = t || {}, r(e) && (e = e.join(this.defaultSeparator)), t.scope && (e = [t.scope, e].join(this.defaultSeparator)), e
    }, g.extend = function(e, t) {
        return void 0 === e && void 0 === t ? {} : h(e, t)
    }, g.t = g.translate, g.l = g.localize, g.p = g.pluralize, g
}), Array.prototype.indexOf || (Array.prototype.indexOf = function(e, t) {
    "use strict";
    if (null == this) throw new TypeError;
    var n = Object(this),
        i = n.length >>> 0;
    if (0 === i) return -1;
    var o = 0;
    if (1 < arguments.length && ((o = Number(t)) != o ? o = 0 : 0 != o && o != Infinity && o != -Infinity && (o = (0 < o || -1) * Math.floor(Math.abs(o)))), i <= o) return -1;
    for (var r = 0 <= o ? o : Math.max(i - Math.abs(o), 0); r < i; r++) if (r in n && n[r] === e) return r;
    return -1
}), Array.prototype.forEach || (Array.prototype.forEach = function(e, t) {
    var n, i;
    if (null == this) throw new TypeError("this is null or not defined");
    var o = Object(this),
        r = o.length >>> 0;
    if ("[object Function]" !== {}.toString.call(e)) throw new TypeError(e + " is not a function");
    for (t && (n = t), i = 0; i < r;) {
        var a;
        Object.prototype.hasOwnProperty.call(o, i) && (a = o[i], e.call(n, a, i, o)), i++
    }
}), Array.prototype.some || (Array.prototype.some = function(e, t) {
    "use strict";
    if (null == this) throw new TypeError;
    var n = Object(this),
        i = n.length >>> 0;
    if ("function" != typeof e) throw new TypeError;
    for (var o = 2 <= arguments.length ? t : void 0, r = 0; r < i; r++) if (r in n && e.call(o, n[r], r, n)) return !0;
    return !1
}), function(e, t) {
    "function" == typeof define && define.amd ? define(["i18n"], t) : "object" == typeof module && module.exports ? t(require("i18n")) : t(e.I18n)
}(this, function(e) {
    "use strict";
    e.translations = {
        en: {
            javascript: {
                account_deletion: {
                    confirm_to_delete: "Delete Account"
                },
                application: {
                    revoke: {
                        additional_msg: "To re-bind, %{action}",
                        "default": "Are you sure you want to unbind the Activity (%{app_name} ) from this form\uff1fThe form settings that were previously locked by the activity will allow modification, but the activity will not continue.",
                        fail_message: "Revoke failed",
                        gd_coupons: "Are you sure you want to unbind the Activity (%{app_name} ) from this form\uff1fThe form settings that were previously locked by the activity will allow modification, but the activity will not continue.",
                        gd_examstack: "Are you sure you want to unbind the Exam (%{app_name} ) from this form\uff1fThe form settings that were previously locked by the exam will allow modification, but the exam will not continue.",
                        gd_instant_rebate: "Are you sure you want to unbind the Activity (%{app_name} ) from this form\uff1fThe form settings that were previously locked by the activity will allow modification, but the activity will not continue.",
                        gd_printer: "Are you sure you want to unbind the Template (%{app_name} ) from this form\uff1fThe form settings that were previously locked by the template will allow modification, but the template will not be available.",
                        gd_red_envelope: "Are you sure you want to unbind the Activity (%{app_name} ) from this form\uff1fThe form settings that were previously locked by the activity will allow modification, but the activity will not continue\uff0cthe undisbursed amount in the red envelope will be returned to the wallet of app.",
                        reauthorized_default_action_message: "go to the \u300c%{application_name}\u300d and save again.",
                        reauthorized_gd_red_envelope_action_message: "go to the \u300c%{application_name}\u300d create new app and bind this form.",
                        success_message: "Revoke successed"
                    }
                },
                apps: {
                    purchase_app: "Prompt message to buy App",
                    warn_trail_app_failed: "Trial App failed"
                },
                attachment: {
                    accept_file_extensions: "Only supportive to\u2026",
                    upload_image: "Image uploading",
                    warn_upload_failed_retry: "Please reselect",
                    warn_upload_oversize: "oversize"
                },
                billing_account: {
                    user_invitation: {
                        email: {
                            blank: "Email address cannot be empty",
                            invalid: "Incorrect email format"
                        },
                        pending: "Waiting for response",
                        send_emails_failed: "Failed to send invitation",
                        send_emails_success: {
                            few: "Sent invitation to %{emails}",
                            many: "Sent invitations to %{count} emails, such as %{emails}"
                        }
                    }
                },
                choice: {
                    hide_choice_when_quota_empty: "To hide the option when quota is empty",
                    hide_quota: "To hide quota",
                    quota_cycle_rule: {
                        no_repeat: "Not repeat",
                        per_day: "Daily",
                        per_week: "Weekly"
                    },
                    quota_recoverable: "Recover quota after delete entry"
                },
                ckeditor: {
                    menus: {
                        bold: "Bold",
                        gdaudio: "Audio",
                        gdphone: "Phone number",
                        gdvideo: "Video",
                        image: "Picture",
                        italic: "Italic",
                        justify_block: "Justify",
                        justify_center: "Center",
                        justify_left: "Left",
                        justify_right: "Right",
                        link: "Hyperlink",
                        mathjax: "Mathematical formula",
                        strike: "Strikethrough",
                        underline: "Underline"
                    }
                },
                common: {
                    abandon: "Discard",
                    action_cancel: "Cancel",
                    action_confirmed: "Confirm",
                    action_failed: " failed",
                    action_success: " successfully",
                    active_now: "active now ",
                    add_data: "Add",
                    audit_success: "Submit successful",
                    bracket: "(%{content})",
                    cancel_select_all: "Select none ",
                    colon: ": ",
                    create_new: "Create",
                    date_age_format: "%{date}\uff08%{age} years old\uff09",
                    default_option: "Select",
                    delete_data: "Delete",
                    delete_failed: "Save failed",
                    download_failed: "Download filed",
                    edit_data: "Edit",
                    expand_html: 'Show More<i class="gd-icon-angle-double-down"></i>',
                    female: "\u5973",
                    from_to: "to",
                    fulfill_information: "Please fulfill team information",
                    input_placeholder: "Please fill in",
                    item_option: "Column",
                    latitude: "Latitude",
                    loading: "Loading...",
                    longitude: "Longitude",
                    man: "\u7537",
                    more: "etc",
                    no_data: "null",
                    options: "Option",
                    options_spec: "Option Desc",
                    or: "or",
                    others: "Other",
                    pack_up_html: 'Pack Up<i class="gd-icon-angle-double-up"></i>',
                    paid_feature: "Premium feature",
                    paid_feature_ent2: "Premium feature for Pro + users",
                    paid_feature_pro2: "Premium feature for Pro users",
                    point: "%{point}",
                    quantity: "quantity",
                    recover: "Restore",
                    resend: "Resend",
                    save: "Save",
                    save_failed: "Save failed",
                    save_success: "Save successful",
                    saving: "Saving",
                    searching: "Searching",
                    second: "S",
                    select_all: "Select all",
                    select_association_form: "Please select a form",
                    setting_saved_failed: "Setting saved failed ",
                    setting_saved_success: "Setting saved successfully",
                    status_off: !1,
                    status_on: !0,
                    text_editor_limit_text: "Characters",
                    title_option: "Row",
                    unnamed: "Untitled",
                    upgrade_package: "Upgrade package",
                    upload_failed: "Upload failed",
                    upload_successful: "Upload successfully",
                    warn_choose_correct_captcha: "Choose correct captcha"
                },
                contact: {
                    add_multiple: "add repeatedly",
                    already_select_all: "All selected.",
                    already_select_filtered_result: "Already select the filtered results",
                    already_select_from_page: "On the page selected.",
                    clear_selected: "Clear selected contacts",
                    contact_not_exist: "Contact does not exist",
                    contacts: "contacts",
                    purchase_email_package: "You have to buy the email package first",
                    select_all: "Select all",
                    select_filtered_result: "Select all filtered",
                    selected_contact_from_filtered_result: "%{selectedContacts} contacts from this filtered results",
                    selected_contacts: "%{selectedcontacts} bit contacts",
                    send_again_after_purchase: "Your current Email level is \u2026, if you continue to send to \u2026.contacts, it may cause the subscriber\u2019s arrearage and cannot be used normally, we recommend you to buy the package first and send again.",
                    send_success_will_show_detail: "Sending finished, the sending result details will be shown very soon",
                    use_semicolon_or_enter_to_separate_multiple: "To use semicolon or enter for multiple",
                    warn_email_quota_might_be_insufficient: "Your current mail balance %{quota} closure, to continue to send to the selected %{selectedCount} for a contact, may cause delinquent accounts not work properly, we recommend that you first",
                    warn_email_quota_not_enough: "Your current email quota is %{quota}, if you need to send to %{selectedCount} contacts",
                    warn_invalid_subject_or_content_via_smtp: "Send Email through self-owned SMTP server; the subject and content of the Email are not supportive to the inserted data, please make some further revision",
                    warn_label_cannot_be_empty: "The label title cannot be empty",
                    warn_label_oversize: "The label title should be no more than 20 characters"
                },
                coupon: {
                    active_coupon_code: "Coupon code activation failed, please retry later",
                    input_coupon_code: "Please input your coupon code",
                    no_available_coupons: "No coupon available",
                    select_none: "None of coupons selected",
                    selected: "(%{selected_coupon} coupons)"
                },
                dashboard: {
                    actions: {
                        favored: {
                            fail: "Failed to favore",
                            successful: "Favored successfully"
                        },
                        pin: {
                            fail: "Failed to pin",
                            successful: "Pined successfully"
                        },
                        unfavored: {
                            fail: "Failed to unfavore",
                            successful: "Unfavore successfully"
                        },
                        unpin: {
                            fail: "Failed to unpin",
                            successful: "Unpinned successfully"
                        }
                    },
                    add_new_label: "Add Tag",
                    cancel_pinned: "Unpin",
                    create_new_form_folder: "Create new folder",
                    delete_form_folder_failed: "Delete folder failed",
                    delete_form_folder_success: "Delete folder succeed",
                    delete_form_folder_text: "<div>Are you sure you want to permanently delete this folder: <span class='highlight'>%{folder_name}</span> \uff1fThe folder has <span class='highlight'>%{folder_count} folders</span> and <span class='highlight'>%{form_count} forms</span>.</div>",
                    delete_form_folder_text_with_folder_only: "<div>Are you sure you want to permanently delete this folder: <span class='highlight'>%{folder_name}</span> \uff1fThe folder has <span class='highlight'>%{folder_count} folders</span>.</div>",
                    delete_form_folder_text_with_form_only: "<div>Are you sure you want to permanently delete this folder: <span class='highlight'>%{folder_name}</span> \uff1fThe folder has <span class='highlight'>%{form_count} forms</span>.</div>",
                    delete_form_folder_title: "Delete Folder",
                    delete_tag_success: "Tag was deleted successfully",
                    edit_form: "Edit Form",
                    edit_label_success: "Tag name changed successfully",
                    edit_tag_success: "Tag name changed successfully",
                    entries_count_in_ten_thousand: "%{count}k",
                    entries_with_ten_thousand: "entries",
                    form_copied_failed_title: "Fail to copy",
                    form_copied_setting_list: "The copied content include",
                    form_copied_success: "Your form has been copied successfully, the name of the new form is as following:",
                    form_copied_success_title: "Your form has been copied!",
                    form_cover_style: "Change style",
                    go_to_setting: "Go to Setting",
                    move_form_failed: "Failed to move",
                    move_form_success: "Moved successfully",
                    move_form_to: "Move to",
                    move_required_manager: "Moving form requires manager role",
                    pinned: "Pined",
                    reserved_entry_warning: "The amount of form data has exceeded the free usage. Please upgrade the package in time.",
                    reserved_entry_warning_for_cooperators: "The form entry volume has exceeded the free dosage, please contact the form creator to upgrade the package to view the full data",
                    select_form_template: "Select template",
                    sort: {
                        created_at: "Date Created",
                        last_entry_created_at: "Entries Today"
                    },
                    sort_tags_failed: "Sort tags failed",
                    sort_tags_success: "Sort tags succeed",
                    warn_label_cannot_be_empty: "The tag name cannot be empty",
                    warn_label_name_duplicate: "The tag name cannot be dupulicated with the existing tag",
                    warn_label_oversize: "The Tag name cannot be any longer than 12 characters.",
                    warn_label_oversize_range: "Longest label name would be 6 Chinese characters or 12 characters.",
                    warn_max_label_number: "Label has been up the the maximum %{max_customized_tags}"
                },
                e_signature: {
                    board_empty: "Signature missing",
                    upload_failed: "Fail to upload signature, please re-sign"
                },
                entries: {
                    add_entry: "Add entry",
                    add_entry_manually: "Add entry manually",
                    address_city: "City",
                    address_city_option: "City",
                    address_district: "district/county",
                    address_district_option: "District",
                    address_province: "Province",
                    address_province_option: "Province",
                    append_from_excel: "Import extra data from excel",
                    append_from_excel_title: "Import from Excel",
                    batch_print_limit: "Supports up to 30 entries at a time",
                    "binding-wechat-account": "Binding Wechat Account",
                    bulk_download_subsheet_oversize_html: "Radio matrix, the matrix fill in the blank worksheet number in a matrix view downward over 65,000 lines, can not be exported. Please <br> screening part of the data, and then export.",
                    bulk_edit_failed: "Bulk edit failed",
                    bulk_edit_failed_with_blank_entry: "The data you are editing has been changed, please refresh page and try again!",
                    bulk_edit_success: "Bulk edit sucess",
                    bulk_edit_title: "Bulk edit",
                    bulk_print_no_selection: "Please check entries first",
                    bulk_print_reach_maxsize: ". Print limit up to 30 entries",
                    bulk_print_title: "Bulk print",
                    click_here_to_restore_entry: "Click here to restore entry",
                    click_to_download: "Click to download",
                    close_wechat_notification: "Turn off Wechat Reminder",
                    close_wechat_notification_instruction: "Are you sure you want to close the Wechat Reminder? You will not be able to continue receiving new data Wechat alerts after closing.",
                    color_mark: "Mark",
                    color_mark_clear: "Unmark",
                    color_mark_failed: "Mark failed",
                    enter_associated_form_entry_page: "Click here to visit the form associate page",
                    enter_bulk_download_attachment_page: "Download uploaded files",
                    "export": "export",
                    export_and_print: "Export & Print",
                    export_estimate_time: "(About %{estimate_time})",
                    export_excel: "Export",
                    export_excel_title: "Export Excel",
                    export_failed: "Entries export failed",
                    export_rows_no_selection: "Please check entries first",
                    export_rows_reach_maxsize: "There's too much entries\uff0cplease use the export function for all columns",
                    filter_by_fields: "Filter by data content",
                    filter_by_submission_date: "Filter by date submitted",
                    filter_data: "Filter entries",
                    form_association_been_deleted: "Associated data has been deleted",
                    form_association_view_full_data: "View full data",
                    hide_columns: "Hide column",
                    image_loading: "Image loading",
                    link_generating_html: "Link creating! It doesn't prevent you from doing anything else.",
                    map_loading: "Map loading",
                    mark_entry: "Mark it",
                    no_data: "No data",
                    no_entry_selected: "Entry not selected",
                    no_recipients: "No recipients",
                    note_cannot_be_empty: "Remark column cannot be empty",
                    print: "print",
                    quantity_of_entries: "%{count} entries",
                    receivers: " %{receiver_count} recipients",
                    reload_entries: "Reload entries",
                    results_search: "Open Search",
                    send_email: "Send Email",
                    send_email_disabled_by_no_email_field: 'There is no "email" field in this form and this feature is not available',
                    send_sms: "Send SMS",
                    send_sms_and_email: "SMS & Email",
                    send_sms_and_email_disabled_by_no_related_field: 'There is no "mobile phone" and "email" field in the form, so this function cannot be used',
                    send_sms_and_email_disabled_by_no_selection: "Please check entries first",
                    send_sms_disabled_by_all_intl_mobile_no: "International phone number does not support SMS",
                    send_sms_disabled_by_no_sms_field: 'There is no "mobile phone" field in this form and this feature is not available',
                    share_entries: "Share ",
                    share_results: "Share Result",
                    show_or_hide_fields: "Manage display columns",
                    transaction_trends: "Traiding Volume",
                    transaction_trends_ordered_stats: "Order Volume",
                    transaction_trends_paid_stats: "Transaction Volume",
                    unmark_entry: "Unmark",
                    view_audit_trail_item: "Entry restore history",
                    view_history: "Task Progress",
                    warn_delete_failed_in_progress: "Delete failed, other data maybe still in the process of deleting, please retry later",
                    warn_delete_failed_refresh_and_retry: "Delete failed, please retry after refreshing your screen",
                    warn_selected_excel_need_required__field_label: "Nonsupport required field uploading from Excel is included in this form, entries from Excel are not supportive temporarily",
                    warn_selected_excel_need_required_field: "You can not append entries from Excel, for the fields of this from cannot import from Excel",
                    wechat_notification_close_fail: "New Data Wechat Reminder Failed to Close",
                    wechat_notification_closed_tooltip: "When enabled, you can receive data alerts in WeChat.",
                    wechat_notification_open_fail: "New Data Wechat Reminder Failed to Open",
                    wechat_notification_open_success: "New Data Wechat Reminds Open Successfully",
                    wechat_notification_opened_tooltip: "You fill in the form data, the system will not push reminder. Please log out of the account and then fill in the data for testing.",
                    wechat_notification_title: "New Data Wechat Reminder"
                },
                feature_trial: {
                    fail_to_end_trial: "Failed to end up Trail",
                    fail_to_start_trial: "Failed to start feature trial",
                    success_to_end_trial: "End up Trail successed"
                },
                field: {
                    acl_black: "Enable Blacklist",
                    acl_black_white_list_text: "Whitelist",
                    acl_count_text: "Set %{acl_count}",
                    acl_modify: "reset",
                    acl_white: "Enable Whitelist",
                    add_option: "Add Option",
                    address_field_label: "Address",
                    at_least: "at least ",
                    at_most: "at least",
                    attachment_field_label: "File Upload",
                    attachment_size_error: "Input error",
                    calculable_field_insertion: {
                        avg: "AVG (average)",
                        max: "MAX (max)",
                        min: "MIN (min)",
                        sum: "SUM (sum)"
                    },
                    cascade_choice: {
                        level: {
                            1: {
                                default_value: "First Level",
                                title: "First Level"
                            },
                            2: {
                                default_value: "Second Level",
                                title: "Second Level"
                            },
                            3: {
                                default_value: "Third Level",
                                title: "Third Level"
                            },
                            4: {
                                default_value: "Fourth Level",
                                title: "Fourth Level"
                            }
                        },
                        max_choices: "Support up to %{count} options"
                    },
                    choice_already_empty: "Already empty",
                    choice_left_quota: "left %{quota}",
                    choice_operand_value_is: "operand value %{operandValue}",
                    choice_prefix: "select",
                    choice_suffix: "option",
                    choose_trigger_condition: "Please select trigger condition",
                    choose_trigger_target_field: "Please select trigger field",
                    choose_triggered_field: "Please choose the field that being triggered",
                    date_field_label: "Date",
                    date_range_hint_between: "Please select date between %{start_date} and %{end_date}",
                    date_range_hint_bigger_than: "Please select %{start_date} and later dates",
                    date_range_hint_smaller_then: "Please select %{end_date} and previous date",
                    e_signature_field_label: "Signature",
                    email_field_label: "Email address",
                    form_association: {
                        choose_associated_display_field: "Please select",
                        choose_associated_field_before_change_prompt: "You cannot change the default text since some of the referenced fields haven't been set correctly"
                    },
                    formula_contains_invalid_variables: "Formula contains field variables that do not exist or are not calculable",
                    formula_contains_unsupported_operators: "Formula contains unsupported operators or variables",
                    formula_disabled: "There are no calculable fields",
                    formula_invalid: "The calculation formula is illegal: contains field variables that do not exist or are not countable",
                    formula_not_empty: "Formula cannot be empty",
                    formula_parse_failed: "Formula is incorrect, parsing failed",
                    geo_field_label: "Location",
                    good_item_one: "Product 1",
                    good_item_three: "Product 3",
                    good_item_two: "Product 2",
                    goods_disable_fixed_number_html: '<dl class="dl-horizontal"> <dt><i class="gd-icon-info-circle"></i></dt> <dd>When variants are set, "default number" and "fix unit" are not available. If you need to set them, please split the multiple variants into multiple products.</dd> </dl>',
                    goods_item_add_new: "Please add items on the right side panel",
                    goods_item_clear_dimensions: "Clear All variants and quantities",
                    goods_item_click_to_add_image: "Click here to add product image",
                    goods_item_default: "Default ",
                    goods_item_inventory_label: "INV. ",
                    goods_item_label: "Product name",
                    goods_item_name: "items",
                    goods_item_total: "Total",
                    goods_item_unit: "",
                    goods_item_update_dimensions: "Configure variants and quantities",
                    goods_max_purchase_quantity: "Maximum Purchase",
                    goods_min_purchase_quantity: "Minimum purchase",
                    hidden_indicator: "This indicator has been hidden",
                    hide_choice_when_quota_empty: "The hide option is enabled when the number of options is empty",
                    image_choice: {
                        add_image_label: "Please upload picture on the right panel",
                        click_to_upload_image: "Please click here to add image ",
                        warn_name_cannot_be_empty: "The image title option cannot be empty",
                        warn_quota_temp_empty_or_positive_number: "Quota must be integer(\u2267 0) or empty",
                        warn_reach_text_max_length: "word limit is %{text_max_length}"
                    },
                    image_choice_field_label: "Image",
                    intl_mobile_no_unsupport_sms_text: "The collected international Numbers do not support sending SMS messages",
                    intl_mobile_no_unsupport_verify_text: "International number verification is not supported, and domestic number verification is not affected",
                    intl_mobile_no_white_list_unsupport_text: "This feature is not available when collecting international phone Numbers",
                    invalid_redirect_url: "Invalid redirect url",
                    link_field_example: 'e.g. <a target="_blank" href="https://jinshuju.net/" title="jinshuju.net">https://jinshuju.net/</a>',
                    link_field_label: "Web page",
                    mobile_field_label: "Phone",
                    name_field_label: "Name",
                    no_targets_field_available: "Because %{field_name} is the last field, there isn't any field can be controlled.",
                    nps_field_label: "How likely would you share this with your friends or colleagues?",
                    option_spec_assocation_view_disabled: {
                        choices_layout: 'Since the field set "Instruction", "Horizontal" Layout is not available',
                        grids_to_occupy: 'Since the field set "Instruction", "Width take up" cannot be less than 1',
                        presentation_style: 'Since the field set "Instruction ", "Presentation style" cannot select Dropdown box'
                    },
                    option_spec_disabled: {
                        choices_layout: 'Since the field set "Horizontal" Layout, \u300cInstruction\u300d is not available',
                        choices_layout_and_presentation_style: 'Since the field "Presentation style" is Dropdown box',
                        grids_to_occupy: 'Since the field "Width take up" <1, "Instruction" is not available',
                        grids_to_occupy_and_choices_layout: 'Since the field set "Horizontal" Layout and "Width take up" <1, \u300cInstruction\u300d is not available',
                        grids_to_occupy_and_choices_layout_and_presentation_style: 'Since the field set "Horizontal" Layout and "Presentation style" is Dropdown box, \u300cInstruction\u300d is not available',
                        grids_to_occupy_and_presentation_style: 'Since the field "Presentation style" and "Width take up" <1, "Instruction" is not available',
                        presentation_style: 'Since the field "Presentation style" is Dropdown box'
                    },
                    option_spec_text_max_text_error: "Cannot exceed %{maxCount} words",
                    optional: "\u9009\u586b",
                    others_prefix: "Please fill in",
                    others_suffix: "character",
                    range_hint_between: "Please input the numbers between %{from_number}-%{to_number}",
                    range_hint_bigger_than: "Please input the number of %{range_number} and above",
                    range_hint_decimal_place_allowed: "Only %{precision} decimal places are allowed\uff0csuch as\uff1a%{example}",
                    range_hint_smaller_then: "Please input number no more than %{range_number}",
                    rating_field_label: "Rating",
                    rule_hide: "hide:",
                    rule_saved_failed: "Please use it after upgrading",
                    rule_saved_failed_invalid_format: "Failed to save rule",
                    rule_saved_success: "Rule saved success",
                    rule_show: "show:",
                    section_break_label: "Name",
                    section_break_notes: "Please edit text in the right panel \u2192",
                    send_mobile_token: "Verify",
                    set_redirect_url: "Please set the redirect page",
                    shared: {
                        maximum_ratings_display_text: "definitely",
                        minimum_ratings_display_text: "unlikely"
                    },
                    sku: {
                        default_empty_or_positive_number: "need positive integer or empty",
                        warn_default_quantity_max_validation: "limit purchase %{limit}",
                        warn_default_quantity_min_validation: "minimum purchase %{limit}",
                        warn_quantity_default_validation: "Please check the data range",
                        warn_quantity_limit_label: "Minimum purchase %{min_limit},limit purchase %{max_limit}",
                        warn_quantity_max_validation: "Please enter the number greater or equal to %{limit}",
                        warn_quantity_min_validation: "Please enter the number greater or equal to %{limit}"
                    },
                    sort_field_note: "Please sort in accordance with the order of priority, click on the option.",
                    telephone_field_label: "Telephone",
                    time_field_label: "Time",
                    verification_token: "Verification code",
                    warn_add_or_choose_one_field: "Please add or choose a field",
                    warn_address_at_least_choose_one: "Please select at least one address option",
                    warn_address_set_city_required: "Please choose city before district or county",
                    warn_address_set_province_required: "Please set your province first",
                    warn_at_least_one_level_one_choice: "\u81f3\u5c11\u9700\u8981\u4e00\u4e2a\u663e\u793a\u7684\u4e00\u7ea7\u9009\u9879",
                    warn_at_least_one_sub_choice: "\u9009\u9879\u300c%{choice}\u300d\u81f3\u5c11\u9700\u8981\u4e00\u4e2a\u663e\u793a\u7684\u4e0b\u7ea7\u9009\u9879",
                    warn_choice_cannot_be_empty: "Options cannot be empty",
                    warn_choice_max_length: "max length %{max_length}",
                    warn_choice_operand_value_temp_validation: "Value must be a number.",
                    warn_choice_quota_temp_validation: "Quota must be integer(\u2267 0) or empty",
                    warn_choice_unnamed_operand_value_unavailable: "Please set the choice first",
                    warn_common_cannot_be_empty: "cannot be empty",
                    warn_common_reach_max: "at most %{max_character_length}",
                    warn_customized_validation_reach_max: "Error message cannot be over 50 characters",
                    warn_default_bigger_than: "Default value should be no less than %{options_min}",
                    warn_default_smaller_than: "Default value should be no more than %{options_max}",
                    warn_dimension_label_cannot_be_empty: "The title cannot be empty",
                    warn_dimension_label_too_long: "The title cannot be over 50 characters",
                    warn_for_cooperators_only: "For administrator only",
                    warn_forteen_digits_at_most: "14 digits at most",
                    warn_good_demension_cannot_be_empty: "The price cannot be empty",
                    warn_good_demension_empty_or_positive_number: "The inventory cannot be negative numbers or empty",
                    warn_goods_item_inventory_exceed_max: "The inventory can not exceed 5 digits",
                    warn_goods_item_inventory_validation: "The inventory cannot be negative numbers or empty",
                    warn_goods_item_name_cannot_be_empty: "Item name cannot be empty",
                    warn_goods_item_predefined_number_validation: "The default quantity cannot be negative numbers or empty",
                    warn_goods_item_price_validation: "The price cannot be empty",
                    warn_integer_required: "Please input positive integer",
                    warn_item_cannot_be_empty: "Option cannot be empty",
                    warn_less_cascade_dropdown_levels: "Levels of options are less than levels of field",
                    warn_load_associable_data_failed: "Obtaining associated data failed",
                    warn_media_type_cannot_be_empty: "The user-defined format cannot be emptyMax files Max files",
                    warn_media_type_support_list: "Invalid format. The correct format only support  letters, numbers, underline and middle line",
                    warn_more_cascade_dropdown_levels: "Levels of options are more than levels of field",
                    warn_no_field_selected: "No selected field",
                    warn_number_required_as_default: "Default value should be a number",
                    warn_section_break_cannot_be_empty: "The title cannot be empty",
                    warn_sms_signature_length: "Signature message between 2 and 8 characters",
                    warn_sms_signature_required: "Please sign your signature",
                    warn_title_cannot_be_empty: "Topic cannot be empty",
                    white_list_count_text: "\uff08\u5df2\u8bbe%{white_list_count}\u4e2a\uff09",
                    white_list_reset: "\u4fee\u6539"
                },
                form: {
                    add_or_filter_condition: 'Add "OR" condition',
                    check_client_recovery_conflict: {
                        confirm: "I know",
                        description: "This form has saved automatically checked when filling out, if you modify the form field, fill in a form by the saved content will fail, you need to re-fill. Please carefully edit the contents of the form.",
                        title: "Form turned on automatically save"
                    },
                    check_unexpected_form_content: "You have unsaved form, do you want to restore your form?",
                    check_unexpected_form_title: "Form Restore",
                    city_donot_support_map_report: "City (not support)",
                    client_cache_notification: "Fill content is automatically saved",
                    confirm_leave_share: "Are you sure to remove all privilege management of this form?",
                    cooperators: {
                        add: "Invite",
                        external: "external user",
                        go_assign_ability: "Next",
                        internal: "internal user",
                        shared: "Shared"
                    },
                    date_example: "(example : 2012-12-30)",
                    delete_rule_failed: "Delete failed",
                    delete_rule_success: "SMS sending task deleted",
                    describe_form: "Describe your form",
                    field_count_forewarning_html: "Current form has been added <span class='highlight'> %{field_count} </span> fields, <br /> from upper left <span class='highlight'> %{remaining_count} </span>, please take note!",
                    fill_form: "fill ",
                    fill_form_able_to: "able",
                    fill_form_everyday_in: "everyday",
                    fill_form_in: "in",
                    fill_frequency: {
                        condition: {
                            by_device: "Each computer/cellphone can fill out only once",
                            by_ip: "Each IP can fill out only once"
                        },
                        fill_type: {
                            once: "Fill out only once",
                            repeatable_by_day: "Fill out one time per day",
                            unlimited: "Fill out allowed"
                        }
                    },
                    form_setting: {
                        fill_rule_condition_warning: "This feature is only available when collecting WeChat information is turned on. Please select the way to collect user WeChat information first",
                        submission_authority: {
                            "private": "Administrator Only",
                            summary: {
                                gd_user_only: {
                                    once: {
                                        by_device: {
                                            text: "Jinshuju users can fill the form once on each device."
                                        },
                                        by_ip: {
                                            text: "Jinshuju users can fill the form once on each IP."
                                        },
                                        by_weixin: {
                                            text: "Jinshuju users can fill the form once on each Wechat OpenID."
                                        },
                                        text: "Jinshuju users can fill the form once."
                                    },
                                    repeatable: {
                                        text: "Jinshuju users can fill the form %{limited_time} %{cycle_period}."
                                    },
                                    repeatable_by_day: {
                                        text: "Jinshuju users can fill the form once everyday."
                                    },
                                    unlimited: {
                                        text: "Jinshuju users only."
                                    }
                                },
                                internal: {
                                    once: {
                                        by_device: {
                                            text: "Internal users can fill the form once on each device."
                                        },
                                        by_ip: {
                                            text: "Internal users can fill the form once on each IP."
                                        },
                                        by_weixin: {
                                            text: "Internal users can fill the form once on each Wechat OpenID."
                                        }
                                    },
                                    repeatable: {
                                        text: "Internal users can fill the form once %{limited_time} %{cycle_period}."
                                    },
                                    unlimited: {
                                        text: "Internal users only."
                                    }
                                },
                                "private": {
                                    text: "Only form admins can fill the form."
                                },
                                "public": {
                                    once: {
                                        by_device: {
                                            text: "All submitters can fill the form once on each device."
                                        },
                                        by_ip: {
                                            text: "All submitters can fill the form once on each IP."
                                        },
                                        by_weixin: {
                                            text: "All submitters can fill the form once on each Wechat OpenID."
                                        }
                                    },
                                    repeatable: {
                                        by_device: {
                                            text: "All submitters can fill the form %{limited_time} %{cycle_period} on each device."
                                        },
                                        by_ip: {
                                            text: "All submitters can fill the form %{limited_time} %{cycle_period} on each IP."
                                        },
                                        by_weixin: {
                                            text: "All submitters can fill the form %{limited_time} %{cycle_period} on each Wechat OpenID."
                                        }
                                    },
                                    repeatable_by_day: {
                                        by_device: {
                                            text: "All submitters can fill the form once everyday on each device."
                                        },
                                        by_ip: {
                                            text: "All submitters can fill the form once on each IP."
                                        },
                                        by_weixin: {
                                            text: "All submitters can fill the form once everyday on each Wechat OpenID."
                                        }
                                    },
                                    unlimited: {
                                        text: "All submitters can fill."
                                    }
                                },
                                weixin_collect_way_html: '<span class="weixin-collect-way-text">(Use wechat account %{weixin_account} to collect info)</span>',
                                weixin_followers_only: {
                                    once: {
                                        by_device: {
                                            text: "Weixin followers can fill the form once on each device."
                                        },
                                        by_ip: {
                                            text: "Weixin followers can fill the form once on each IP."
                                        },
                                        by_weixin: {
                                            text: "Weixin followers can fill the form once on each Wechat OpenID."
                                        }
                                    },
                                    repeatable: {
                                        text: "Weixin followers can fill the form once %{limited_time} %{cycle_period}."
                                    },
                                    unlimited: {
                                        text: "Weixin followers only."
                                    }
                                },
                                weixin_limited: {
                                    "false": "All device. ",
                                    "true": "Wechat/Work Wechat only. "
                                },
                                weixin_qiye_followers_only: {
                                    once: {
                                        by_device: {
                                            text: "WeChat Work members can fill the form once on each device."
                                        },
                                        by_ip: {
                                            text: "WeChat Work members can fill the form once on each IP."
                                        },
                                        by_weixin: {
                                            text: "WeChat Work members can fill the form once on each Wechat OpenID."
                                        }
                                    },
                                    repeatable: {
                                        text: "WeChat Work members can fill the form once %{limited_time} %{cycle_period}."
                                    },
                                    unlimited: {
                                        text: "WeChat Work members only."
                                    }
                                }
                            }
                        },
                        weixin_qiye: "Collect via Work WeChat",
                        weixin_qiye_disabled: "Collect via Work WeChat"
                    },
                    input_form_name: "Please input the form name",
                    leave_with_unsaved: "Some modification in your form is still unsaved, are you sure to leave?",
                    max_bulk_image_upload: "Please select no more than 5 images each time, you can transmit multiple times",
                    metrics: {
                        fill: "Fills",
                        search: "Searches",
                        view: "Views"
                    },
                    paused_pushing_notification: "Paused",
                    pushing_notification: "Pushing ",
                    pushing_test_notification: "Testing",
                    pushing_test_notification_success: "Push testing message succeed",
                    reached_max: "Reached maximum cooperators",
                    save_setting_failed: "Save failed ",
                    save_setting_success: "Save successful",
                    search_condition: "Search condition ",
                    select_file_to_upload: "Please upload your attachment here, no bigger than %{max_size}MB each",
                    select_file_to_upload_with_max_quantity: "\xa0Please upload your attachments here, %{max_size}MB each as %{max_file_quantity} files at most",
                    setting_saved_failed: "Save failed ",
                    setting_saved_success: "Save successful",
                    switch_to_simple_mode: "Switch to easy mode",
                    switch_to_upgrade_mode: "Switch to advanced mode",
                    theme: {
                        chuangkit_label: "Chuangkit",
                        fail_to_launch_chuangkit: "Failed to open Chuangkit",
                        max_carousel_images_upload: "To ensure the display effect, do not upload more than 5 pictures.",
                        upload_header_from_local: "Local",
                        warn_submit_btn_text_reach_max: "Please input no more than %{options_max} words",
                        warn_submit_btn_text_required: "Please input text messages for the submit button"
                    },
                    unnamed_form: "Form unnamed",
                    upload_file_only_support: "Only support ",
                    warn_at_least_show_one_option: "Show at least one option",
                    warn_cannot_hidden_field_with_rule: "Options with rules settled can not be hidden",
                    warn_check_internet: "Please check your network link",
                    warn_field_limited: "Field limitation reminder",
                    warn_invalid_data_range: "End time cannot be easier than the start time",
                    warn_load_entries_failed: "Data upload failed remainder",
                    warn_setting_reach_max_params: "No more than 3 additional parameters are allowed ",
                    warn_valid_url_required: "Please input valid URL address, for example:http://jinshuju.net/callback",
                    warn_weixin_cannot_collect_data: "Cannot collect WeChat information by using Jinshuju\u2019s account",
                    warn_weixin_setting_html: "Because this form has set your WeChat payment account, or  WeChat payment is enabled in this  form\u2019s ping++setting, you can only collect the WeChat users\u2019 information by using your WeChat Official Acount. Please reselect.",
                    warn_wrong_params: "Paramater input error"
                },
                global: {
                    copy_success: "Copy success",
                    disable_for_e_qq_html: '<label><strong>\u5df2\u5f00\u542f\u817e\u8baf\u5e7f\u544a\u63a8\u5e7f</strong></label>\n<div class="text-muted">\n  \u5f53\u524d\u8868\u5355\u5df2\u7ecf\u751f\u6210\u6295\u653e\u94fe\u63a5\u5e76\u5728\u817e\u8baf\u793e\u4ea4\u5e7f\u544a\u4e2d\u8fdb\u884c\u6295\u653e\uff0c\u8be5\u884c\u4e3a\u5c06\u9650\u5236\u8868\u5355\u7684\u7f16\u8f91\u64cd\u4f5c\u3002\u5982\u9700\u4fee\u6539\u8868\u5355\u6211\u4eec\u5efa\u8bae\u4f60\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u8fdb\u884c\u64cd\u4f5c\u3002<a href="#tooltip_promot_process" data-toggle="collapse" class="click-to-view">\u70b9\u51fb\u67e5\u770b\u64cd\u4f5c\u6b65\u9aa4</a>\n  <div id="tooltip_promot_process" class="collapse">\n    ---------------------------------------------\n    <ul>\n      <li>\u7b2c\u4e00\u6b65\uff1a\u590d\u5236\u9700\u8981\u6295\u653e\u7684\u8868\u5355 </li>\n      <li>\u7b2c\u4e8c\u6b65\uff1a\u5728\u65b0\u8868\u5355\u4e2d\u8fdb\u884c\u8868\u5355\u7684\u5b57\u6bb5\u7684\u589e\u51cf\uff0c\u5b8c\u5584\u8868\u5355\u89c4\u5219\u548c\u76f8\u5173\u8bbe\u7f6e</li>\n      <li>\u7b2c\u4e09\u6b65\uff1a\u5728\u53d1\u5e03-\u8868\u5355\u63a8\u5e7f\u9875\u9762\u4e2d\u751f\u6210\u63a8\u5e7f\u94fe\u63a5</li>\n      <li>\u7b2c\u56db\u6b65\uff1a\u524d\u5f80\u817e\u8baf\u793e\u4ea4\u5e7f\u544a\u5e73\u53f0\uff0c\u624b\u5de5\u590d\u5236\u65b0\u8868\u5355\u7684\u63a8\u5e7f\u94fe\u63a5\u66ff\u6362\u539f\u5e7f\u544a\u4e2d\u7684\u63a8\u5e7f\u94fe\u63a5</li>\n    </ul>\n  </div>\n</div>\n',
                    follow_our_wechat: "follow our wechat",
                    login: "Jinshuju- Log in",
                    mac_copy_shortcut: "use ,,,to copy",
                    no_result: "No results",
                    notification: {
                        email_invalid: "Incorrect send to email format",
                        invalid_values: "Incorrect send to email/number format",
                        loading: "Loading",
                        mobile_invalid: "Wrong format of sending number (mainland China number only)",
                        no_new_message: "No new message "
                    },
                    others_copy_shortcut: "use Ctrl-C to copy",
                    payment: {
                        confirm_to_pay: "payment affirmed",
                        confirm_upgrade: "confirm the upgrade",
                        create_payment_failed: "Creation of payment request failed",
                        page_expired: "Page expired, please refresh your screen",
                        paid_description_html: "After deduction of the original package, but also the remaining <span class = 'highlight'> \xa5 %{refund_price} </ span>, will form the balance, back to your account.",
                        paid_success: "Recharge succeed",
                        pay_diff_with_origin_price_to_finish_upgrade: "pay the price difference to finish upgrade",
                        scan_alipay_to_pay: "Scan the QR Code via AliPay (Sub Total: %{total_price})",
                        scan_weixin_to_pay: "Scan the QR Code via WeChat (Sub Total: %{total_price})",
                        topup_account: "Recharge account",
                        upgrade_success: "Upgrade success",
                        warn_get_weixin_info_failed: "Failed to obtain the wechat information, please refresh your screen"
                    },
                    plan: {
                        per_month: "mo",
                        per_year: "yr",
                        warn_network_error_refresh: "Network error, please refresh your screen"
                    },
                    qrcode: {
                        filename: "QR code",
                        large_size: "Large",
                        medium_size: "Medium",
                        small_size: "Small",
                        warn_no_qrcode_file: "No transmitting of the QR code text"
                    },
                    share: {
                        to_mingdao: "Share to mingdao",
                        to_qzone: "Share to Qzone",
                        to_weibo: "Share to weibo"
                    },
                    signup: "Jinshuju- Sign up",
                    sms: {
                        at_least: "at least. ",
                        description_html: '<div class="count-info"><span class="has-fields-1"></span><span class="char-count"></span> letters (including signature<span class="extra-info"></span>), the message will be charged as <span class="sms-count"></span> message <span class="has-fields-2"></span></div>',
                        except_fields: "Except for form field, you have entered ",
                        include_link_hint: "A link has been detected in the content. Please add a space before and after the link to ensure that the recipient can open the link normally in the SMS.",
                        preview: "Preview message",
                        send: "Send Group Message",
                        warn_reach_max_length: "Input characters beyond the maximum limit %{max_length}, please cut the message"
                    },
                    validator: {
                        condition_required: "select condition",
                        duplicate_group: "Criteria query repeated, select again",
                        email_format: "Input Email with correct format",
                        email_or_mobile_format: "Input correct Email address or phone number",
                        email_required: "Email can not be blank",
                        mobile_format: "Input correct Chinese mobile number",
                        nickname_format: "Nickname can only use letters, numbers, and underline.",
                        phone_required: "Mobile number can not be blank",
                        verification_code_required: "Verification code can not be blank"
                    },
                    warn_browser_not_supported: "Your browser does not support direct copy, please copy manually"
                },
                global_search: {
                    template_market_entrance_text: 'More results about "%{keyword}"'
                },
                onboarding: {
                    forgot_password: {
                        warn_account_cannot_be_empty: "The account cannot be empty",
                        warn_invalid_email: "Account is not registered yet <a href=/signup>Click here to sign up for an account</a>"
                    },
                    warn: {
                        account_cannot_be_empty: "Email address or phone number cannot be empty",
                        account_in_use: " Email address or phone number in use",
                        captcha_cannot_be_empty: "Captcha cannot be empty",
                        captcha_invalid: "Invalid captcha",
                        confirm_password_cannot_be_empty: "Password cannot be empty",
                        confirm_password_min_length: "Password length must not be  less than 6 bits",
                        email_cannot_be_empty: "Email address cannot be empty",
                        email_format_invalid: "Please input the email address with correct format",
                        invalid_email: " Email address in use",
                        mobile_cannot_be_empty: "The phone number cannot be empty",
                        mobile_format_invalid: "Please input correct phone number",
                        nickname_in_use: "Nickname in already taken",
                        nickname_reach_max: "Nickname length should be within 2-20 characters ",
                        password_cannot_be_empty: "Password cannot be empty",
                        password_min_length: "Please input a password with at least 6 digits",
                        weixin_account_in_use: "This wechat account has been occupied, please change your account"
                    }
                },
                published_form: {
                    warn_get_weixin_info_failed: "WeChat information inquiry failed, please reopen your form"
                },
                report: {
                    sort_field_hide_detail_title_html: 'Hide details<i class="gd-icon-angle-double-up"></i>',
                    sort_field_show_detail_title_html: 'Show details<i class="gd-icon-angle-double-down"></i>'
                },
                shopping_cart: {
                    header: {
                        count: "Quantity",
                        goods_name: "Product",
                        price: "Unit Price",
                        seleted_goods: "Selected products",
                        total_price: "Subtotal"
                    }
                },
                template: {
                    action_failed: "Operation failed",
                    comment_failed: "Comment failed",
                    comment_success: "Comment succeed",
                    expand: "Display all",
                    warn_reach_max_industries: "maximum of 3 businesses are allowed "
                },
                third_party: {
                    alipay_pay: "Alipay ",
                    alipay_to_pay: "Alipay payment",
                    embedded_others: "Can't selt-adaptive height",
                    embedded_script: "Selt-adaptive height",
                    paid: "Already paid",
                    unpaid: "Unpaid ",
                    warn_failed_to_pay_resubmit: "Payment failed, please resubmit your form ",
                    warn_retrieve_qrcode_failed: "Acquiring qrcode for payment failed, %{err_msg}",
                    warn_retrieve_wxpay_failed: "Can't load payment service: %{err_msg}.",
                    warn_retrieve_wxpay_qrcode_failed: "Acquiring qrcode for WeChat payment failed, %{err_msg}",
                    warn_retrieve_wxpay_qrcode_timeout: "Time our for acquiring WeChat payment two-dimensional code, please resubmit payment ",
                    warn_verify_weixin_setting: "Please check the parameter setting for WeChat payment, otherwise the App password or the customer\u2019s  payment password has been changed",
                    weixin_pay: "WeChat payment"
                },
                user: {
                    bind_weixin_fail: "Bind WeChat reminder binding failed",
                    bind_weixin_fail_text: "%{fail_message}.(Please change WeChat or login to the account to unbind the operation)",
                    bind_weixin_success: "Binding wechat reminder succeed",
                    bind_weixin_success_text: "You can now receive new data WeChat reminders in real time.",
                    branding_off: "Off",
                    branding_on: "On",
                    btn_disable_cname: "Disable Custom Domain",
                    btn_enable_cname: "Enable Custom Domain",
                    change_from_role_to: "Are you sure to change your role from %{origin_role} to %{selected_role}",
                    confirm_no_error: "Confirmed correct",
                    delete_role_title: "Are you sure to remove all privilege management of this form?",
                    delete_setting_failed: "Setting delete failed",
                    delete_setting_success: "Setting delete succeed",
                    hide_usage_detail: "Hide details ",
                    open_weixin_pay: "Open the WeChat payment configuration at the same time",
                    show_usage_detail: "View details",
                    submitting: "Submitting",
                    turn_off_custom_domain_content: "If you turn off the custom domain, the related form cannot be accessed via your Custom Domain anymore. Are you sure to turn off?",
                    turn_off_custom_domain_title: "Are you sure to turn off the Custom Domain?",
                    update_nickname_failed: "Nickname update failed",
                    update_nickname_success: "Nickname update success",
                    verify_email_sent: "Verification email has been sent, please check",
                    warn_item_cannot_be_empty: "This option cannot be empty",
                    warn_network_error_retry: "Network error, please try later",
                    warn_nickname_cannot_be_empty: "Nickname cannot be empty",
                    warn_permission_denied: "You are not authorized to do this operation",
                    warn_send_email_fail_retry: "Verification email sending failed, please try later",
                    warn_too_many_actions_retry: "Frequent operation, please try again one minute later",
                    warn_update_nickname_failed: "Error happened in the saving process",
                    warn_verify_weixin_failed_retry: "WeChat account verification failed, please try again"
                },
                warning: {
                    browser_version_too_low: "Your current version of browser is out of date, please update to IE 10 or use ",
                    get_better_experience: "acquire better experience",
                    google_browser: "google browser ",
                    warn_entry_quota_used_up: "Your data plan has been used up, please update our package or recharge"
                },
                yunpian_template: {
                    audit_sms: "Submit for Approval",
                    change_template_disabled_reason: "SMS template cannot be edit while approval",
                    create_template_disabled_reason: "You cannot create a new template while approval",
                    han_only_signature: "SMS signature shall not be all letters or numbers",
                    invalid_condition_value: "Invalid condition value",
                    invalid_content: "Please fill in the SMS content",
                    invalid_recipient_api_code: "Invalid recipient",
                    invalid_recipients: "Cannot find valid recipients",
                    invalid_send_timing: "Invalid send timing",
                    invalid_signature: "Please submit a SMS signature",
                    invalid_signature_length: "SMS signature length is between 2-10 characters",
                    invalid_sms_template: "Choose a template",
                    marketing_channel: "Promotions&Coupons",
                    normal_channel: "Reminders&Alerts",
                    not_support_sms_when_intl_mobile_no: "SMS messages are not supported by international phone Numbers, and domestic phone Numbers will not be affected",
                    replace_variable_placeholder: "< Click to insert field >",
                    reuse_template_disabled_reason: "No available template",
                    send_data: {
                        all_data: "All new entries",
                        special_data: "All %{field} equal %{value} data"
                    },
                    send_failed_retry: "Send failed, please retry",
                    send_sms: "Send",
                    send_timing: {
                        datetime: "%{year}-%{month}-%{day} %{hour}:%{minute}",
                        immediately: "Immediately",
                        on_specified_datetime: "Will be sent at %{datetime}",
                        scheduled_with_rule: "Will be sent at %{field} %{date_offset_number} %{date_offset_unit} %{date_offset_action} %{hour}:%{minute}"
                    },
                    send_to: {
                        form_field: "%{field}"
                    },
                    sms_template_placeholder: "Please choose a SMS tempalte",
                    yunpian_channel_disabled_reason: "You cannot edit approved/in approval SMS templates"
                }
            }
        },
        "zh-CN": {
            javascript: {
                account_deletion: {
                    confirm_to_delete: "\u786e\u8ba4\u6ce8\u9500"
                },
                application: {
                    revoke: {
                        additional_msg: "\u5982\u9700\u91cd\u65b0\u7ed1\u5b9a\uff0c%{action}",
                        "default": "\u4f60\u786e\u5b9a\u8981\u89e3\u9664\u6d3b\u52a8\u201c%{app_name}\u201d\u4e0e\u5f53\u524d\u8868\u5355\u7684\u7ed1\u5b9a\u5417\uff1f\u89e3\u7ed1\u540e\uff0c\u539f\u5148\u88ab\u8be5\u6d3b\u52a8\u9501\u5b9a\u7684\u8868\u5355\u8bbe\u7f6e\u5c06\u5141\u8bb8\u4fee\u6539\uff0c\u4f46\u8be5\u6d3b\u52a8\u5c06\u4e0d\u53ef\u7ee7\u7eed\u8fdb\u884c\u3002",
                        fail_message: "\u89e3\u7ed1\u5931\u8d25",
                        gd_coupons: "\u4f60\u786e\u5b9a\u8981\u89e3\u9664\u4f18\u60e0\u7801\u201c%{app_name}\u201d\u4e0e\u5f53\u524d\u8868\u5355\u7684\u7ed1\u5b9a\u5417\uff1f\u89e3\u7ed1\u540e\uff0c\u539f\u5148\u88ab\u8be5\u4f18\u60e0\u7801\u6d3b\u52a8\u9501\u5b9a\u7684\u8868\u5355\u8bbe\u7f6e\u5c06\u5141\u8bb8\u4fee\u6539\uff0c\u4f46\u8be5\u4f18\u60e0\u7801\u6d3b\u52a8\u5c06\u4e0d\u53ef\u7ee7\u7eed\u8fdb\u884c\u3002",
                        gd_examstack: "\u4f60\u786e\u5b9a\u8981\u89e3\u9664\u8003\u8bd5\u201c%{app_name}\u201d\u4e0e\u5f53\u524d\u8868\u5355\u7684\u7ed1\u5b9a\u5417\uff1f\u89e3\u7ed1\u540e\uff0c\u539f\u5148\u88ab\u8be5\u8003\u8bd5\u9501\u5b9a\u7684\u8868\u5355\u8bbe\u7f6e\u5c06\u5141\u8bb8\u4fee\u6539\uff0c\u4f46\u8be5\u8003\u8bd5\u5c06\u4e0d\u53ef\u7ee7\u7eed\u8fdb\u884c\u3002",
                        gd_instant_rebate: "\u4f60\u786e\u5b9a\u8981\u89e3\u9664\u6ee1\u51cf\u6d3b\u52a8\u201c%{app_name}\u201d\u4e0e\u5f53\u524d\u8868\u5355\u7684\u7ed1\u5b9a\u5417\uff1f\u89e3\u7ed1\u540e\uff0c\u539f\u5148\u88ab\u8be5\u6ee1\u51cf\u6d3b\u52a8\u9501\u5b9a\u7684\u8868\u5355\u8bbe\u7f6e\u5c06\u5141\u8bb8\u4fee\u6539\uff0c\u4f46\u8be5\u6ee1\u51cf\u6d3b\u52a8\u5c06\u4e0d\u53ef\u7ee7\u7eed\u8fdb\u884c\u3002",
                        gd_printer: "\u4f60\u786e\u5b9a\u8981\u89e3\u9664\u6a21\u677f\u201c%{app_name}\u201d\u4e0e\u5f53\u524d\u8868\u5355\u7684\u7ed1\u5b9a\u5417\uff1f\u89e3\u7ed1\u540e\uff0c\u539f\u5148\u88ab\u8be5\u6a21\u677f\u9501\u5b9a\u7684\u8868\u5355\u8bbe\u7f6e\u5c06\u5141\u8bb8\u4fee\u6539\uff0c\u4f46\u8be5\u6a21\u677f\u5c06\u4e0d\u53ef\u7ee7\u7eed\u4f7f\u7528\u3002",
                        gd_red_envelope: "\u4f60\u786e\u5b9a\u8981\u89e3\u9664\u7ea2\u5305\u201c%{app_name}\u201d\u4e0e\u5f53\u524d\u8868\u5355\u7684\u7ed1\u5b9a\u5417\uff1f\u89e3\u7ed1\u540e\uff0c\u539f\u5148\u88ab\u8be5\u7ea2\u5305\u9501\u5b9a\u7684\u8868\u5355\u8bbe\u7f6e\u5c06\u5141\u8bb8\u4fee\u6539\uff0c\u4f46\u8be5\u7ea2\u5305\u5c06\u505c\u6b62\u53d1\u653e\uff0c\u7ea2\u5305\u4e2d\u672a\u53d1\u653e\u5b8c\u7684\u91d1\u989d\u5c06\u9000\u56de\u5230\u5fae\u4fe1\u7ea2\u5305\u5e94\u7528\u7684\u94b1\u5305\u4e2d\u3002",
                        reauthorized_default_action_message: "\u53ef\u524d\u5f80\u300c%{application_name}\u300d\u5e94\u7528\u4e2d\u518d\u6b21\u4fdd\u5b58\u5373\u53ef\u3002",
                        reauthorized_gd_red_envelope_action_message: "\u53ef\u524d\u5f80\u300c%{application_name}\u300d\u5e94\u7528\u4e2d\u521b\u5efa\u65b0\u5e94\u7528\u5e76\u7ed1\u5b9a\u6b64\u8868\u5355\u5373\u53ef\u3002",
                        success_message: "\u89e3\u7ed1\u6210\u529f"
                    }
                },
                apps: {
                    purchase_app: "\u8d2d\u4e70\u5e94\u7528\u63d0\u793a",
                    warn_trail_app_failed: "\u5e94\u7528\u8bd5\u7528\u5931\u8d25"
                },
                attachment: {
                    accept_file_extensions: "\u4ec5\u652f\u6301\uff1a",
                    upload_image: "\u56fe\u7247\u4e0a\u4f20",
                    warn_upload_failed_retry: "\uff0c\u8bf7\u91cd\u9009",
                    warn_upload_oversize: "\u5df2\u8d85"
                },
                billing_account: {
                    user_invitation: {
                        email: {
                            blank: "\u90ae\u4ef6\u5730\u5740\u4e0d\u80fd\u4e3a\u7a7a",
                            invalid: "\u90ae\u4ef6\u5730\u5740\u683c\u5f0f\u4e0d\u6b63\u786e"
                        },
                        pending: "\u9080\u8bf7\u5c1a\u672a\u56de\u5e94",
                        send_emails_failed: "\u9080\u8bf7\u5931\u8d25",
                        send_emails_success: {
                            few: "\u5df2\u53d1\u9001\u90ae\u4ef6\u9080\u8bf7\u81f3%{emails}",
                            many: "\u5df2\u53d1\u9001\u90ae\u4ef6\u9080\u8bf7\u81f3%{emails}\u7b49%{count}\u4e2a\u90ae\u7bb1"
                        }
                    }
                },
                choice: {
                    hide_choice_when_quota_empty: "\u9009\u9879\u540d\u989d\u4e3a\u7a7a\u65f6\u9690\u85cf\u9009\u9879",
                    hide_quota: "\u4e0d\u5411\u586b\u8868\u8005\u5c55\u793a\u9009\u9879\u540d\u989d\u5269\u4f59\u6570\u5b57",
                    quota_cycle_rule: {
                        no_repeat: "\u4e0d\u91cd\u7f6e",
                        per_day: "\u6309\u5929",
                        per_week: "\u6309\u5468"
                    },
                    quota_recoverable: "\u5220\u9664\u6570\u636e\u540e\uff0c\u9009\u9879\u540d\u989d\u81ea\u52a8\u6062\u590d"
                },
                ckeditor: {
                    menus: {
                        bold: "\u52a0\u7c97",
                        gdaudio: "\u97f3\u9891",
                        gdphone: "\u7535\u8bdd",
                        gdvideo: "\u89c6\u9891",
                        image: "\u56fe\u7247",
                        italic: "\u503e\u659c",
                        justify_block: "\u4e24\u7aef\u5bf9\u9f50",
                        justify_center: "\u5c45\u4e2d",
                        justify_left: "\u5de6\u5bf9\u9f50",
                        justify_right: "\u53f3\u5bf9\u9f50",
                        link: "\u8d85\u94fe\u63a5",
                        mathjax: "\u6570\u5b66\u516c\u5f0f",
                        strike: "\u4e2d\u5212\u7ebf",
                        underline: "\u4e0b\u5212\u7ebf"
                    }
                },
                common: {
                    abandon: "\u4e22\u5f03",
                    action_cancel: "\u53d6\u6d88",
                    action_confirmed: "\u786e\u5b9a",
                    action_failed: "\u5931\u8d25",
                    action_success: "\u6210\u529f",
                    active_now: "\u7acb\u5373\u5f00\u542f",
                    add_data: "\u6dfb\u52a0",
                    audit_success: "\u63d0\u4ea4\u5ba1\u67e5\u6210\u529f",
                    bracket: "\uff08%{content}\uff09",
                    cancel_select_all: "\u53d6\u6d88\u5168\u9009",
                    colon: "\uff1a",
                    create_new: "\u521b\u5efa",
                    date_age_format: "%{date}\uff08%{age}\u5c81\uff09",
                    default_option: "\u8bf7\u9009\u62e9",
                    delete_data: "\u5220\u9664",
                    delete_failed: "\u4fdd\u5b58\u5931\u8d25",
                    download_failed: "\u4e0b\u8f7d\u5931\u8d25",
                    edit_data: "\u7f16\u8f91",
                    expand_html: '\u5c55\u5f00<i class="gd-icon-angle-double-down"></i>',
                    female: "\u5973",
                    from_to: "\u81f3",
                    fulfill_information: "\u8bf7\u5b8c\u5584\u4fe1\u606f",
                    input_placeholder: "\u8bf7\u8f93\u5165",
                    item_option: "\u9879\u76ee",
                    latitude: "\u7eac\u5ea6",
                    loading: "\u52a0\u8f7d\u4e2d...",
                    longitude: "\u7ecf\u5ea6",
                    man: "\u7537",
                    more: "\u7b49",
                    no_data: "\u65e0",
                    options: "\u9009\u9879",
                    options_spec: "\u9009\u9879\u8bf4\u660e",
                    or: "\u6216",
                    others: "\u5176\u4ed6",
                    pack_up_html: '\u6536\u8d77<i class="gd-icon-angle-double-up"></i>',
                    paid_feature: "\u9ad8\u7ea7\u529f\u80fd",
                    paid_feature_ent2: "\u4e13\u4e1a\u589e\u5f3a\u7248\u4e13\u5c5e\u529f\u80fd",
                    paid_feature_pro2: "\u4ed8\u8d39\u7248\u4e13\u5c5e\u529f\u80fd",
                    point: "%{point}\u5206",
                    quantity: "\u6570\u91cf",
                    recover: "\u6062\u590d",
                    resend: "\u91cd\u65b0\u53d1\u9001",
                    save: "\u4fdd\u5b58",
                    save_failed: "\u4fdd\u5b58\u5931\u8d25",
                    save_success: "\u4fdd\u5b58\u6210\u529f",
                    saving: "\u4fdd\u5b58\u4e2d...",
                    searching: "\u641c\u7d22\u4e2d...",
                    second: "\u79d2",
                    select_all: "\u5168\u9009",
                    select_association_form: "\u8bf7\u5148\u9009\u62e9\u5173\u8054\u8868\u5355",
                    setting_saved_failed: "\u8bbe\u7f6e\u4fdd\u5b58\u5931\u8d25",
                    setting_saved_success: "\u8bbe\u7f6e\u4fdd\u5b58\u6210\u529f",
                    status_off: "\u5df2\u5173\u95ed",
                    status_on: "\u5df2\u5f00\u542f",
                    text_editor_limit_text: "\u53ef\u8f93\u5165\u6587\u5b57:",
                    title_option: "\u9898\u76ee",
                    unnamed: "\u672a\u547d\u540d",
                    upgrade_package: "\u5347\u7ea7\u5957\u9910",
                    upload_failed: "\u4e0a\u4f20\u5931\u8d25",
                    upload_successful: "\u4e0a\u4f20\u6210\u529f",
                    warn_choose_correct_captcha: "\u8bf7\u9009\u62e9\u6b63\u786e\u7684\u9a8c\u8bc1\u7801"
                },
                contact: {
                    add_multiple: "\u91cd\u590d\u6dfb\u52a0",
                    already_select_all: "\u5df2\u9009\u62e9\u5168\u90e8",
                    already_select_filtered_result: "\u5df2\u9009\u62e9\u672c\u6b21\u7b5b\u9009\u7ed3\u679c\u4e2d",
                    already_select_from_page: "\u5df2\u9009\u62e9\u6b64\u9875\u9762\u4e0a",
                    clear_selected: "\u6e05\u9664\u6240\u9009\u5185\u5bb9",
                    contact_not_exist: "\u8054\u7cfb\u4eba\u4e0d\u5b58\u5728",
                    contacts: "\u4f4d\u8054\u7cfb\u4eba\u3002",
                    purchase_email_package: "\u8d2d\u4e70\u90ae\u4ef6\u5305",
                    select_all: "\u9009\u62e9\u5168\u90e8",
                    select_filtered_result: "\u5168\u9009\u672c\u6b21\u7b5b\u9009\u7ed3\u679c\u4e2d",
                    selected_contact_from_filtered_result: "\u672c\u6b21\u7b5b\u9009\u7ed3\u679c\u4e2d%{selectedContacts}\u4f4d\u8054\u7cfb\u4eba",
                    selected_contacts: "%{selectedContacts}\u4f4d\u8054\u7cfb\u4eba",
                    send_again_after_purchase: "\uff0c\u8d2d\u4e70\u6210\u529f\u540e\u518d\u6b21\u53d1\u9001\u3002",
                    send_success_will_show_detail: "\u53d1\u9001\u5b8c\u6210\uff0c\u5373\u5c06\u663e\u793a\u53d1\u9001\u7ed3\u679c\u8be6\u60c5",
                    use_semicolon_or_enter_to_separate_multiple: "\u6dfb\u52a0\u591a\u4e2a\u8bf7\u7528\u5206\u53f7\u6216\u56de\u8f66\u9694\u5f00",
                    warn_email_quota_might_be_insufficient: "\u4f60\u5f53\u524d\u7684\u90ae\u4ef6\u4f59\u91cf\u4e3a%{quota}\u5c01\uff0c\u82e5\u8981\u7ee7\u7eed\u53d1\u9001\u7ed9\u6240\u9009%{selectedCount}\u4f4d\u8054\u7cfb\u4eba\uff0c\u53ef\u80fd\u4f1a\u9020\u6210\u8d26\u6237\u6b20\u8d39\u65e0\u6cd5\u6b63\u5e38\u4f7f\u7528\uff0c\u6211\u4eec\u5efa\u8bae\u4f60\u5148",
                    warn_email_quota_not_enough: "\u4f60\u5f53\u524d\u7684\u90ae\u4ef6\u4f59\u91cf\u4e3a%{quota}\u5c01\uff0c\u5982\u9700\u53d1\u9001\u7ed9\u6240\u9009%{selectedCount}\u4f4d\u8054\u7cfb\u4eba\uff0c\u8bf7\u5148",
                    warn_invalid_subject_or_content_via_smtp: "\u901a\u8fc7\u81ea\u6709SMTP\u670d\u52a1\u5668\u53d1\u9001\u90ae\u4ef6\uff0c\u90ae\u4ef6\u4e3b\u9898\u548c\u90ae\u4ef6\u5185\u5bb9\u4e0d\u652f\u6301\u63d2\u5165\u6570\u636e\uff0c\u8bf7\u4fee\u6b63\u3002",
                    warn_label_cannot_be_empty: "\u6807\u7b7e\u540d\u79f0\u4e0d\u80fd\u4e3a\u7a7a",
                    warn_label_oversize: "\u6807\u7b7e\u540d\u79f0\u4e0d\u80fd\u8d85\u8fc720\u4e2a\u5b57"
                },
                coupon: {
                    active_coupon_code: "\u5151\u6362\u7801\u6fc0\u6d3b\u5931\u8d25\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5",
                    input_coupon_code: "\u8bf7\u8f93\u5165\u4f18\u60e0\u5238\u5151\u6362\u7801",
                    no_available_coupons: "\u65e0",
                    select_none: "\u672a\u9009\u62e9",
                    selected: "\uff08%{selected_coupon}\u5f20\u4f18\u60e0\u5238\uff09"
                },
                dashboard: {
                    actions: {
                        favored: {
                            fail: "\u6536\u85cf\u5931\u8d25",
                            successful: "\u6536\u85cf\u6210\u529f\uff0c\u8bf7\u524d\u5f80\u6211\u7684\u6536\u85cf\u67e5\u770b"
                        },
                        pin: {
                            fail: "\u7f6e\u9876\u5931\u8d25",
                            successful: "\u7f6e\u9876\u6210\u529f"
                        },
                        unfavored: {
                            fail: "\u53d6\u6d88\u6536\u85cf\u5931\u8d25",
                            successful: "\u53d6\u6d88\u6536\u85cf\u6210\u529f"
                        },
                        unpin: {
                            fail: "\u53d6\u6d88\u7f6e\u9876\u5931\u8d25",
                            successful: "\u53d6\u6d88\u7f6e\u9876\u6210\u529f"
                        }
                    },
                    add_new_label: "\u6dfb\u52a0\u6807\u7b7e",
                    cancel_pinned: "\u53d6\u6d88\u7f6e\u9876",
                    create_new_form_folder: "\u521b\u5efa\u65b0\u6587\u4ef6\u5939",
                    delete_form_folder_failed: "\u5220\u9664\u6587\u4ef6\u5939\u5931\u8d25",
                    delete_form_folder_success: "\u5220\u9664\u6587\u4ef6\u5939\u6210\u529f",
                    delete_form_folder_text: "<div>\u786e\u8ba4\u8981\u5220\u9664\u6587\u4ef6\u5939 <span class='highlight'>%{folder_name}</span> \u5417\uff1f\u6b64\u6587\u4ef6\u5939\u5305\u542b<span class='highlight'>%{folder_count}\u4e2a\u6587\u4ef6\u5939</span>\u548c<span class='highlight'>%{form_count}\u4e2a\u8868\u5355</span>\uff0c\u4e00\u65e6\u5220\u9664\u540e\u8fd9\u4e9b\u6587\u4ef6\u5939\u548c\u8868\u5355\u5c06\u5b58\u653e\u5728\u684c\u9762\u5662</div>",
                    delete_form_folder_text_with_folder_only: "<div>\u786e\u8ba4\u8981\u5220\u9664\u6587\u4ef6\u5939 <span class='highlight'>%{folder_name}</span> \u5417\uff1f\u6b64\u6587\u4ef6\u5939\u5305\u542b<span class='highlight'>%{folder_count}\u4e2a\u6587\u4ef6\u5939</span>\uff0c\u4e00\u65e6\u5220\u9664\u540e\u8fd9\u4e9b\u6587\u4ef6\u5939\u5c06\u5b58\u653e\u5728\u684c\u9762\u5662</div>",
                    delete_form_folder_text_with_form_only: "<div>\u786e\u8ba4\u8981\u5220\u9664\u6587\u4ef6\u5939 <span class='highlight'>%{folder_name}</span> \u5417\uff1f\u6b64\u6587\u4ef6\u5939\u5305\u542b<span class='highlight'>%{form_count}\u4e2a\u8868\u5355</span>\uff0c\u4e00\u65e6\u5220\u9664\u540e\u8fd9\u4e9b\u8868\u5355\u5c06\u5b58\u653e\u5728\u684c\u9762\u5662</div>",
                    delete_form_folder_title: "\u5220\u9664\u6587\u4ef6\u5939\u786e\u8ba4",
                    delete_tag_success: "\u6807\u7b7e\u5220\u9664\u6210\u529f",
                    edit_form: "\u7f16\u8f91\u8868\u5355",
                    edit_label_success: "\u6807\u7b7e\u4fee\u6539\u6210\u529f",
                    edit_tag_success: "\u6807\u7b7e\u4fee\u6539\u6210\u529f",
                    entries_count_in_ten_thousand: "%{count}",
                    entries_with_ten_thousand: "\u4e07\u6570\u636e",
                    form_copied_failed_title: "\u8868\u5355\u590d\u5236\u5931\u8d25",
                    form_copied_setting_list: "\u5df2\u590d\u5236\u7684\u5185\u5bb9\u5305\u62ec\uff1a",
                    form_copied_success: "\u4f60\u7684\u8868\u5355\u5df2\u590d\u5236\u6210\u529f\uff0c\u65b0\u8868\u5355\u540d\u79f0\u5982\u4e0b\uff1a",
                    form_copied_success_title: "\u8868\u5355\u590d\u5236\u6210\u529f",
                    form_cover_style: "\u6837\u5f0f",
                    go_to_setting: "\u524d\u5f80\u8bbe\u7f6e",
                    move_form_failed: "\u8868\u5355\u79fb\u52a8\u5931\u8d25",
                    move_form_success: "\u8868\u5355\u79fb\u52a8\u6210\u529f",
                    move_form_to: "\u79fb\u52a8\u5230",
                    move_required_manager: "\u975e\u7ba1\u7406\u5458\u65e0\u6cd5\u79fb\u52a8\u8868\u5355",
                    pinned: "\u7f6e\u9876",
                    reserved_entry_warning: "\u8868\u5355\u6570\u636e\u91cf\u5df2\u8d85\u51fa\u514d\u8d39\u7528\u91cf\uff0c\u8bf7\u53ca\u65f6\u5347\u7ea7\u5957\u9910",
                    reserved_entry_warning_for_cooperators: "\u8be5\u8868\u5355\u6570\u636e\u91cf\u5df2\u8d85\u51fa\u514d\u8d39\u7528\u91cf\uff0c\u8bf7\u8054\u7cfb\u8868\u5355\u521b\u5efa\u8005\u5347\u7ea7\u5957\u9910\u4ee5\u67e5\u770b\u5b8c\u6574\u6570\u636e",
                    select_form_template: "\u9009\u62e9\u6a21\u677f",
                    sort: {
                        created_at: "\u6700\u65b0\u8868\u5355\u521b\u5efa\u65f6\u95f4",
                        last_entry_created_at: "\u6700\u65b0\u6570\u636e\u63d0\u4ea4\u65f6\u95f4"
                    },
                    sort_tags_failed: "\u6807\u7b7e\u6392\u5e8f\u5931\u8d25",
                    sort_tags_success: "\u6807\u7b7e\u6392\u5e8f\u6210\u529f",
                    warn_label_cannot_be_empty: "\u6807\u7b7e\u540d\u79f0\u4e0d\u80fd\u4e3a\u7a7a",
                    warn_label_name_duplicate: "\u6807\u7b7e\u540d\u79f0\u4e0d\u80fd\u91cd\u590d",
                    warn_label_oversize: "\u6807\u7b7e\u540d\u79f0\u8fc7\u957f\uff08\u6700\u957f\u4e3a6\u4e2a\u6c49\u5b57\u621612\u4e2a\u5b57\u7b26\uff09",
                    warn_label_oversize_range: "\u6700\u957f\u4e3a6\u4e2a\u6c49\u5b57\u621612\u4e2a\u5b57\u7b26",
                    warn_max_label_number: "\u6807\u7b7e\u5df2\u6ee1%{max_customized_tags}\u4e0a\u9650"
                },
                e_signature: {
                    board_empty: "\u7b7e\u540d\u9762\u677f\u4e3a\u7a7a",
                    upload_failed: "\u4e0a\u4f20\u7b7e\u540d\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5"
                },
                entries: {
                    add_entry: "\u6dfb\u52a0\u6570\u636e",
                    add_entry_manually: "\u624b\u52a8\u6dfb\u52a0\u6570\u636e",
                    address_city: "\u5e02",
                    address_city_option: "- \u5e02 -",
                    address_district: "\u533a\u53bf",
                    address_district_option: "- \u533a/\u53bf -",
                    address_province: "\u7701",
                    address_province_option: "- \u7701/\u81ea\u6cbb\u533a/\u76f4\u8f96\u5e02 -",
                    append_from_excel: "Excel\u5bfc\u5165\u6570\u636e",
                    append_from_excel_title: "\u4eceExcel\u8ffd\u52a0",
                    batch_print_limit: "\u4e00\u6b21\u6700\u591a\u652f\u630130\u6761\u6570\u636e",
                    "binding-wechat-account": "\u7ed1\u5b9a\u5fae\u4fe1\u8d26\u53f7",
                    bulk_download_subsheet_oversize_html: "\u77e9\u9635\u5355\u9009\u3001\u77e9\u9635\u586b\u7a7a\u5728\u77e9\u9635\u89c6\u56fe\u5de5\u4f5c\u8868\u4e0b\u884c\u6570\u8d85\u8fc765000\u884c\uff0c\u65e0\u6cd5\u5bfc\u51fa\u3002<br>\u8bf7\u7b5b\u9009\u90e8\u5206\u6570\u636e\uff0c\u518d\u8fdb\u884c\u5bfc\u51fa\u3002",
                    bulk_edit_failed: "\u6279\u91cf\u7f16\u8f91\u5931\u8d25",
                    bulk_edit_failed_with_blank_entry: "\u4f60\u6240\u7f16\u8f91\u7684\u6570\u636e\u53d1\u751f\u4e86\u53d8\u5316\uff0c\u8bf7\u5173\u95ed\u5f39\u7a97\u5237\u65b0\u540e\u91cd\u8bd5\u3002",
                    bulk_edit_success: "\u6279\u91cf\u7f16\u8f91\u6210\u529f",
                    bulk_edit_title: "\u6279\u91cf\u7f16\u8f91",
                    bulk_print_no_selection: "\u8bf7\u5148\u52fe\u9009\u8981\u6253\u5370\u7684\u6570\u636e",
                    bulk_print_reach_maxsize: "(\u6700\u591a\u652f\u630130\u6761)",
                    bulk_print_title: "\u6279\u91cf\u6253\u5370",
                    click_here_to_restore_entry: "\u5982\u9700\u6062\u590d\u6570\u636e\uff0c\u8bf7\u70b9\u51fb\u8fd9\u91cc\uff01",
                    click_to_download: "\u70b9\u51fb\u4e0b\u8f7d",
                    close_wechat_notification: "\u5173\u95ed\u5fae\u4fe1\u63d0\u9192",
                    close_wechat_notification_instruction: "\u786e\u5b9a\u8981\u5173\u95ed\u5fae\u4fe1\u63d0\u9192\u5417\uff1f\u5173\u95ed\u540e\u5c06\u4f1a\u65e0\u6cd5\u7ee7\u7eed\u6536\u5230\u65b0\u6570\u636e\u5fae\u4fe1\u63d0\u9192",
                    color_mark: "\u6807\u8bb0\u989c\u8272",
                    color_mark_clear: "\u53d6\u6d88\u6807\u8bb0",
                    color_mark_failed: "\u6807\u8bb0\u989c\u8272\u5931\u8d25",
                    enter_associated_form_entry_page: "\u8fdb\u5165\u5173\u8054\u8868\u5355\u6570\u636e\u754c\u9762",
                    enter_bulk_download_attachment_page: "\u8fdb\u5165\u8be5\u9644\u4ef6\u6279\u91cf\u4e0b\u8f7d\u9875\u9762",
                    "export": "\u5bfc\u51fa",
                    export_and_print: "\u5bfc\u51fa&\u6253\u5370",
                    export_estimate_time: "\uff08\u7ea6\u9700%{estimate_time}\u5206\u949f\uff09",
                    export_excel: "\u5bfc\u51fa\u6570\u636e",
                    export_excel_title: "\u5bfc\u51faExcel",
                    export_failed: "\u5bfc\u51fa\u5931\u8d25",
                    export_rows_no_selection: "\u8bf7\u5148\u52fe\u9009\u8981\u5bfc\u51fa\u7684\u6570\u636e",
                    export_rows_reach_maxsize: "\u52fe\u9009\u7684\u6570\u636e\u8d85\u51fa%{export_selected_rows_threshold}\u6761\uff0c\u8bf7\u4f7f\u7528\u5bfc\u51fa\u6240\u6709\u5217\u529f\u80fd",
                    filter_by_fields: "\u6309\u6570\u636e\u5185\u5bb9\u7b5b\u9009",
                    filter_by_submission_date: "\u6309\u63d0\u4ea4\u65e5\u671f\u7b5b\u9009",
                    filter_data: "\u7b5b\u9009\u6570\u636e",
                    form_association_been_deleted: "\u5173\u8054\u6570\u636e\u5df2\u88ab\u5220\u9664",
                    form_association_view_full_data: "\u67e5\u770b\u5b8c\u6574\u6570\u636e",
                    hide_columns: "\u9690\u85cf\u5217",
                    image_loading: "\u56fe\u7247\u52a0\u8f7d\u4e2d...",
                    link_generating_html: "\u5730\u5740\u751f\u6210\u4e2d...<br/>\u5e76\u4e0d\u59a8\u788d\u60a8\u505a\u5176\u4ed6\u64cd\u4f5c",
                    map_loading: "\u5730\u56fe\u52a0\u8f7d\u4e2d\u2026\u2026",
                    mark_entry: "\u6807\u8bb0\u6570\u636e",
                    no_data: "\u6682\u65e0\u6570\u636e",
                    no_entry_selected: "\u672a\u9009\u4e2d\u6570\u636e",
                    no_recipients: "\u65e0\u6536\u4ef6\u4eba",
                    note_cannot_be_empty: "\u5907\u6ce8\u5185\u5bb9\u4e0d\u80fd\u4e3a\u7a7a",
                    print: "\u6253\u5370",
                    quantity_of_entries: "%{count}\u6761\u6570\u636e",
                    receivers: "%{receiver_count}\u4f4d\u6536\u4ef6\u4eba",
                    reload_entries: "\u91cd\u65b0\u52a0\u8f7d\u6570\u636e",
                    results_search: "\u5bf9\u5916\u67e5\u8be2",
                    send_email: "\u53d1\u9001\u90ae\u4ef6",
                    send_email_disabled_by_no_email_field: "\u8be5\u8868\u5355\u4e2d\u65e0\u300c\u90ae\u7bb1\u300d\u5b57\u6bb5\uff0c\u65e0\u6cd5\u4f7f\u7528\u8be5\u529f\u80fd",
                    send_sms: "\u53d1\u9001\u77ed\u4fe1",
                    send_sms_and_email: "\u53d1\u9001\u77ed\u4fe1&\u90ae\u4ef6",
                    send_sms_and_email_disabled_by_no_related_field: "\u8868\u5355\u4e2d\u65e0\u300c\u624b\u673a\u300d\u53ca\u300c\u90ae\u7bb1\u300d\u5b57\u6bb5\uff0c\u65e0\u6cd5\u4f7f\u7528\u8be5\u529f\u80fd",
                    send_sms_and_email_disabled_by_no_selection: "\u8bf7\u5148\u52fe\u9009\u8981\u53d1\u9001\u7684\u6570\u636e",
                    send_sms_disabled_by_all_intl_mobile_no: "\u56fd\u9645\u624b\u673a\u53f7\u4e0d\u652f\u6301\u53d1\u9001\u77ed\u4fe1\u529f\u80fd",
                    send_sms_disabled_by_no_sms_field: "\u8be5\u8868\u5355\u4e2d\u65e0\u300c\u624b\u673a\u300d\u5b57\u6bb5\uff0c\u65e0\u6cd5\u4f7f\u7528\u8be5\u529f\u80fd",
                    share_entries: "\u6570\u636e\u5206\u4eab",
                    share_results: "\u7ed3\u679c\u5206\u4eab",
                    show_or_hide_fields: "\u663e\u793a\u6216\u9690\u85cf\u5404\u5217\u6570\u636e",
                    transaction_trends: "\u4ea4\u6613\u91cf",
                    transaction_trends_ordered_stats: "\u4e0b\u5355\u91cf",
                    transaction_trends_paid_stats: "\u6210\u4ea4\u91cf",
                    unmark_entry: "\u53d6\u6d88\u6807\u8bb0",
                    view_audit_trail_item: "\u67e5\u770b\u6570\u636e\u53d8\u66f4\u8bb0\u5f55",
                    view_history: "\u67e5\u770b\u4efb\u52a1\u8bb0\u5f55",
                    warn_delete_failed_in_progress: "\u5220\u9664\u5931\u8d25\uff0c\u53ef\u80fd\u8fd8\u6709\u5176\u5b83\u7684\u6570\u636e\u6b63\u5728\u5220\u9664\u4e2d\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5",
                    warn_delete_failed_refresh_and_retry: "\u5220\u9664\u5931\u8d25\uff01\u8bf7\u5237\u65b0\u9875\u9762\u540e\u91cd\u8bd5",
                    warn_selected_excel_need_required__field_label: "\u6b64\u8868\u5355\u542b\u6709\u4e0d\u652f\u6301Excel\u4e0a\u4f20\u7684\u5fc5\u586b\u5b57\u6bb5\uff0c\u6682\u4e0d\u652f\u6301\u4eceExcel\u8ffd\u52a0\u6570\u636e",
                    warn_selected_excel_need_required_field: "\u6b64\u8868\u5355\u542b\u6709\u4e0d\u652f\u6301Excel\u4e0a\u4f20\u7684\u5fc5\u586b\u5b57\u6bb5\uff0c\u6682\u4e0d\u652f\u6301\u4eceExcel\u8ffd\u52a0\u6570\u636e",
                    wechat_notification_close_fail: "\u65b0\u6570\u636e\u5fae\u4fe1\u63d0\u9192\u5173\u95ed\u5931\u8d25",
                    wechat_notification_closed_tooltip: "\u5f00\u542f\u540e\uff0c\u53ef\u5728\u5fae\u4fe1\u4e2d\u63a5\u6536\u6570\u636e\u63d0\u9192\u3002",
                    wechat_notification_open_fail: "\u65b0\u6570\u636e\u5fae\u4fe1\u63d0\u9192\u6253\u5f00\u5931\u8d25",
                    wechat_notification_open_success: "\u65b0\u6570\u636e\u5fae\u4fe1\u63d0\u9192\u6253\u5f00\u6210\u529f",
                    wechat_notification_opened_tooltip: "\u81ea\u5df1\u586b\u5199\u7684\u8868\u5355\u6570\u636e\uff0c\u7cfb\u7edf\u4e0d\u4f1a\u63a8\u9001\u63d0\u9192\u3002\u8bf7\u9000\u51fa\u8d26\u53f7\u540e\u518d\u586b\u5199\u6570\u636e\uff0c\u8fdb\u884c\u6d4b\u8bd5\u3002",
                    wechat_notification_title: "\u65b0\u6570\u636e\u5fae\u4fe1\u63d0\u9192"
                },
                feature_trial: {
                    fail_to_end_trial: "\u7ed3\u675f\u4f01\u4e1a\u8bd5\u7528\u5931\u8d25",
                    fail_to_start_trial: "\u5f00\u542f\u4f01\u4e1a\u8bd5\u7528\u5931\u8d25",
                    success_to_end_trial: "\u7ed3\u675f\u4f01\u4e1a\u8bd5\u7528\u6210\u529f"
                },
                field: {
                    acl_black: "\u5f00\u542f\u9ed1\u540d\u5355",
                    acl_black_white_list_text: "\u767d\u540d\u5355",
                    acl_count_text: "\uff08\u5df2\u8bbe%{acl_count}\u4e2a\uff09",
                    acl_modify: "\u4fee\u6539",
                    acl_white: "\u5f00\u542f\u767d\u540d\u5355",
                    add_option: "\u6dfb\u52a0\u9879",
                    address_field_label: "\u5730\u5740",
                    at_least: "\u6700\u5c11",
                    at_most: "\u6700\u591a",
                    attachment_field_label: "\u9644\u4ef6",
                    attachment_size_error: "\u8f93\u5165\u9519\u8bef",
                    calculable_field_insertion: {
                        avg: "AVG\uff08\u5e73\u5747\u503c\uff09",
                        max: "MAX\uff08\u6700\u5927\u503c\uff09",
                        min: "MIN\uff08\u6700\u5c0f\u503c\uff09",
                        sum: "SUM\uff08\u6c42\u548c\uff09"
                    },
                    cascade_choice: {
                        level: {
                            1: {
                                default_value: "\u4e00\u7ea7\u9009\u9879",
                                title: "\u4e00\u7ea7\u4e0b\u62c9"
                            },
                            2: {
                                default_value: "\u4e8c\u7ea7\u9009\u9879",
                                title: "\u4e8c\u7ea7\u4e0b\u62c9"
                            },
                            3: {
                                default_value: "\u4e09\u7ea7\u9009\u9879",
                                title: "\u4e09\u7ea7\u4e0b\u62c9"
                            },
                            4: {
                                default_value: "\u56db\u7ea7\u9009\u9879",
                                title: "\u56db\u7ea7\u4e0b\u62c9"
                            }
                        },
                        max_choices: "\u6bcf\u7ea7\u4e0b\u62c9\u6846\u4e2d\u6700\u591a\u652f\u6301%{count}\u4e2a\u9009\u9879"
                    },
                    choice_already_empty: "\u5df2\u7a7a",
                    choice_left_quota: "\u4f59%{quota}",
                    choice_operand_value_is: "\u503c%{operandValue}",
                    choice_prefix: "\u9009",
                    choice_suffix: "\u9879",
                    choose_trigger_condition: "\u8bf7\u9009\u62e9\u89e6\u53d1\u6761\u4ef6",
                    choose_trigger_target_field: "\u8bf7\u9009\u62e9\u89e6\u53d1\u5b57\u6bb5",
                    choose_triggered_field: "\u8bf7\u9009\u62e9\u88ab\u89e6\u53d1\u7684\u5b57\u6bb5",
                    date_field_label: "\u65e5\u671f",
                    date_range_hint_between: "\u8bf7\u9009\u62e9%{start_date}\u5230%{end_date}\u4e4b\u95f4\u7684\u65e5\u671f",
                    date_range_hint_bigger_than: "\u8bf7\u9009\u62e9%{start_date}\u53ca\u4e4b\u540e\u7684\u65e5\u671f",
                    date_range_hint_smaller_then: "\u8bf7\u9009\u62e9%{end_date}\u53ca\u4e4b\u524d\u7684\u65e5\u671f",
                    e_signature_field_label: "\u7b7e\u540d",
                    email_field_label: "\u90ae\u7bb1",
                    form_association: {
                        choose_associated_display_field: "\u8bf7\u9009\u62e9",
                        choose_associated_field_before_change_prompt: "\u56e0\u6709\u672a\u8bbe\u7f6e\u7684\u5173\u8054\u5b57\u6bb5\u6545\u4e0d\u652f\u6301\u66f4\u6539\u9ed8\u8ba4\u6587\u6848"
                    },
                    formula_contains_invalid_variables: "\u516c\u5f0f\u5305\u542b\u4e0d\u5b58\u5728\u6216\u8005\u4e0d\u53ef\u8ba1\u7b97\u7684\u5b57\u6bb5\u53d8\u91cf",
                    formula_contains_unsupported_operators: "\u516c\u5f0f\u5305\u542b\u6709\u4e0d\u652f\u6301\u7684\u8ba1\u7b97\u7b26\u6216\u8005\u53d8\u91cf",
                    formula_disabled: "\u5f53\u524d\u8868\u5355\u6ca1\u6709\u53ef\u4ee5\u53c2\u4e0e\u8ba1\u7b97\u7684\u5b57\u6bb5",
                    formula_invalid: "\u8ba1\u7b97\u516c\u5f0f\u4e0d\u5408\u6cd5\uff1a\u5305\u542b\u4e0d\u5b58\u5728\u6216\u8005\u4e0d\u53ef\u8ba1\u7b97\u7684\u5b57\u6bb5\u53d8\u91cf",
                    formula_not_empty: "\u516c\u5f0f\u4e0d\u80fd\u4e3a\u7a7a",
                    formula_parse_failed: "\u516c\u5f0f\u4e0d\u6b63\u786e\uff0c\u89e3\u6790\u5931\u8d25",
                    geo_field_label: "\u5730\u7406\u4f4d\u7f6e",
                    good_item_one: "\u5546\u54c1\u4e00",
                    good_item_three: "\u5546\u54c1\u4e09",
                    good_item_two: "\u5546\u54c1\u4e8c",
                    goods_disable_fixed_number_html: '<dl class="dl-horizontal"> <dt><i class="gd-icon-info-circle"></i></dt> <dd>\u8bbe\u7f6e\u591a\u89c4\u683c\u65f6\uff0c\u300c\u9ed8\u8ba4\u6570\u91cf\u300d\u548c\u300c\u4e0d\u53ef\u4fee\u6539\u6570\u91cf\u300d\u4e0d\u53ef\u7528\uff0c\u5982\u9700\u8bbe\u7f6e\u8bf7\u5c06\u591a\u89c4\u683c\u62c6\u5206\u6210\u591a\u4e2a\u5546\u54c1\u3002</dd> </dl>',
                    goods_item_add_new: "\u8bf7\u5728\u53f3\u4fa7\u9762\u677f\u6dfb\u52a0\u5546\u54c1",
                    goods_item_clear_dimensions: "\u6e05\u9664\u89c4\u683c\u548c\u6570\u91cf",
                    goods_item_click_to_add_image: "\u70b9\u6b64\u6dfb\u52a0\u5546\u54c1\u56fe\u7247",
                    goods_item_default: "\u9ed8\u8ba4",
                    goods_item_inventory_label: "\u5e93\u5b58",
                    goods_item_label: "\u5546\u54c1\u540d",
                    goods_item_name: "\u5546\u54c1",
                    goods_item_total: "\u5171",
                    goods_item_unit: "\u4ef6",
                    goods_item_update_dimensions: "\u4fee\u6539\u8be6\u7ec6\u89c4\u683c\u548c\u6570\u91cf",
                    goods_max_purchase_quantity: "\u6700\u591a\u8d2d\u4e70",
                    goods_min_purchase_quantity: "\u6700\u5c11\u8d2d\u4e70",
                    hidden_indicator: "\u6b64\u9009\u9879\u5df2\u88ab\u9690\u85cf",
                    hide_choice_when_quota_empty: "\u5df2\u5f00\u542f\u9009\u9879\u540d\u989d\u4e3a\u7a7a\u65f6\u9690\u85cf\u9009\u9879",
                    image_choice: {
                        add_image_label: "\u8bf7\u5728\u53f3\u4fa7\u9762\u677f\u6dfb\u52a0\u56fe\u7247",
                        click_to_upload_image: "\u70b9\u6b64\u6dfb\u52a0\u56fe\u7247\u9009\u9879",
                        warn_name_cannot_be_empty: "\u56fe\u7247\u540d\u79f0\u9009\u9879\u4e0d\u80fd\u4e3a\u7a7a",
                        warn_quota_temp_empty_or_positive_number: "\u540d\u989d\u5fc5\u987b\u4e3a\u975e\u8d1f\u6570\u5b57\u6216\u4e3a\u7a7a",
                        warn_reach_text_max_length: "\u5b57\u6570\u4e0d\u80fd\u5927\u4e8e%{text_max_length}"
                    },
                    image_choice_field_label: "\u56fe\u7247",
                    intl_mobile_no_unsupport_sms_text: "\u6536\u96c6\u5230\u7684\u56fd\u9645\u53f7\u7801\u6682\u4e0d\u652f\u6301\u53d1\u9001\u77ed\u4fe1",
                    intl_mobile_no_unsupport_verify_text: "\u6682\u4e0d\u652f\u6301\u56fd\u9645\u53f7\u7801\u9a8c\u8bc1\uff0c\u56fd\u5185\u53f7\u7801\u9a8c\u8bc1\u4e0d\u53d7\u5f71\u54cd",
                    intl_mobile_no_white_list_unsupport_text: "\u6536\u96c6\u56fd\u9645\u624b\u673a\u53f7\u65f6\uff0c\u8be5\u529f\u80fd\u4e0d\u53ef\u7528",
                    invalid_redirect_url: "\u7f51\u5740\u683c\u5f0f\u4e0d\u5bf9",
                    link_field_example: "\u586b\u5199\u793a\u4f8b\uff1ahttp://jinshuju.net \u6216 https://jinshuju.net",
                    link_field_label: "\u7f51\u5740",
                    mobile_field_label: "\u624b\u673a",
                    name_field_label: "\u59d3\u540d",
                    no_targets_field_available: "\u6ca1\u6709\u53ef\u4f9b\u63a7\u5236\u7684\u5b57\u6bb5\uff0c\u56e0\u4e3a\u201c%{field_name}\u201d\u662f\u8be5\u8868\u5355\u6700\u540e\u4e00\u4e2a\u5b57\u6bb5",
                    nps_field_label: "\u4f60\u6709\u591a\u5927\u53ef\u80fd\u628a\u6211\u4eec\u63a8\u8350\u7ed9\u670b\u53cb\u6216\u540c\u4e8b\uff1f\u8bf7\u4ece0\u5206\u523010\u5206\u6253\u5206\u3002",
                    option_spec_assocation_view_disabled: {
                        choices_layout: "\u7531\u4e8e\u8be5\u5b57\u6bb5\u8bbe\u7f6e\u4e86\u9009\u9879\u8bf4\u660e\uff0c\u300c\u6a2a\u5411\u300d\u6392\u5217\u65b9\u5f0f\u4e0d\u53ef\u7528",
                        grids_to_occupy: "\u7531\u4e8e\u8be5\u5b57\u6bb5\u8bbe\u7f6e\u4e86\u9009\u9879\u8bf4\u660e\uff0c\u300c\u5bbd\u5ea6\u5360\u7528\u6574\u884c\u300d\u7684\u6bd4\u4f8b\u4e0d\u80fd\u5c0f\u4e8e1",
                        presentation_style: "\u7531\u4e8e\u8be5\u5b57\u6bb5\u8bbe\u7f6e\u4e86\u9009\u9879\u8bf4\u660e\uff0c\u300c\u4e0b\u62c9\u6846\u300d\u5c55\u793a\u6837\u5f0f\u4e0d\u53ef\u7528"
                    },
                    option_spec_disabled: {
                        choices_layout: "\u7531\u4e8e\u8be5\u5b57\u6bb5\u8bbe\u7f6e\u4e86\u300c\u6a2a\u5411\u300d\u6392\u5217\u65b9\u5f0f\uff0c\u9009\u9879\u8bf4\u660e\u4e0d\u53ef\u7528",
                        choices_layout_and_presentation_style: "\u7531\u4e8e\u8be5\u5b57\u6bb5\u5c55\u793a\u6837\u5f0f\u4e3a\u300c\u4e0b\u62c9\u6846\u300d\uff0c\u9009\u9879\u8bf4\u660e\u4e0d\u53ef\u7528",
                        grids_to_occupy: "\u7531\u4e8e\u8be5\u5b57\u6bb5\u300c\u5bbd\u5ea6\u5360\u7528\u6574\u884c\u300d\u7684\u6bd4\u4f8b<1\uff0c\u9009\u9879\u8bf4\u660e\u4e0d\u53ef\u7528",
                        grids_to_occupy_and_choices_layout: "\u7531\u4e8e\u8be5\u5b57\u6bb5\u8bbe\u7f6e\u4e86\u300c\u6a2a\u5411\u300d\u6392\u5217\u65b9\u5f0f\u548c\u300c\u5bbd\u5ea6\u5360\u7528\u6574\u884c\u300d\u6bd4\u4f8b<1\uff0c\u9009\u9879\u8bf4\u660e\u4e0d\u53ef\u7528",
                        grids_to_occupy_and_choices_layout_and_presentation_style: "\u7531\u4e8e\u8be5\u5b57\u6bb5\u8bbe\u7f6e\u4e86\u300c\u6a2a\u5411\u300d\u6392\u5217\u65b9\u5f0f\u548c\u300c\u5bbd\u5ea6\u5360\u7528\u6574\u884c\u300d\u6bd4\u4f8b<1\uff0c\u9009\u9879\u8bf4\u660e\u4e0d\u53ef\u7528",
                        grids_to_occupy_and_presentation_style: "\u7531\u4e8e\u8be5\u5b57\u6bb5\u5c55\u793a\u6837\u5f0f\u4e3a\u300c\u4e0b\u62c9\u6846\u300d\u6392\u5217\u65b9\u5f0f\u548c\u300c\u5bbd\u5ea6\u5360\u7528\u6574\u884c\u300d\u7684\u6bd4\u4f8b<1\uff0c\u9009\u9879\u8bf4\u660e\u4e0d\u53ef\u7528",
                        presentation_style: "\u7531\u4e8e\u8be5\u5b57\u6bb5\u5c55\u793a\u6837\u5f0f\u4e3a\u300c\u4e0b\u62c9\u6846\u300d\uff0c\u9009\u9879\u8bf4\u660e\u4e0d\u53ef\u7528"
                    },
                    option_spec_text_max_text_error: "\u4e0d\u80fd\u8d85\u8fc7%{maxCount}\u4e2a\u5b57",
                    optional: "\u9009\u586b",
                    others_prefix: "\u8bf7\u586b\u5199",
                    others_suffix: "\u4e2a\u5b57",
                    range_hint_between: "\u8bf7\u8f93\u5165%{from_number}-%{to_number}\u4e4b\u95f4\u7684\u6570\u5b57",
                    range_hint_bigger_than: "\u8bf7\u8f93\u5165%{range_number}\u53ca\u4ee5\u4e0a\u7684\u6570\u5b57",
                    range_hint_decimal_place_allowed: "\u4ec5\u652f\u6301%{precision}\u4f4d\u5c0f\u6570\uff0c\u5982\uff1a%{example}",
                    range_hint_smaller_then: "\u8bf7\u8f93\u5165\u4e0d\u5927\u4e8e%{range_number}\u7684\u6570\u5b57",
                    rating_field_label: "\u8bc4\u5206",
                    rule_hide: "\u9690\u85cf\uff1a",
                    rule_saved_failed: "\u8bf7\u5347\u7ea7\u540e\u518d\u4f7f\u7528\uff01",
                    rule_saved_failed_invalid_format: "\u89c4\u5219\u4fdd\u5b58\u5931\u8d25\uff01",
                    rule_saved_success: "\u89c4\u5219\u4fdd\u5b58\u6210\u529f\uff01",
                    rule_show: "\u663e\u793a\uff1a",
                    section_break_label: "\u63cf\u8ff0",
                    section_break_notes: "\u8bf7\u5728\u53f3\u4fa7\u9762\u677f\u6dfb\u52a0\u6bb5\u843d\u8bf4\u660e\u4fe1\u606f",
                    send_mobile_token: "\u53d1\u9001\u9a8c\u8bc1\u77ed\u4fe1",
                    set_redirect_url: "\u8bf7\u8bbe\u7f6e\u8df3\u8f6c\u7684\u7f51\u5740",
                    shared: {
                        maximum_ratings_display_text: "\u6781\u6709\u53ef\u80fd",
                        minimum_ratings_display_text: "\u4e0d\u53ef\u80fd"
                    },
                    sku: {
                        default_empty_or_positive_number: "\u5fc5\u987b\u4e3a\u975e\u8d1f\u6574\u6570\u6216\u7a7a",
                        warn_default_quantity_max_validation: "\u9650\u8d2d%{limit}\u4ef6",
                        warn_default_quantity_min_validation: "\u8d77\u8d2d%{limit}\u4ef6",
                        warn_quantity_default_validation: "\u8bf7\u68c0\u67e5\u6570\u636e\u8303\u56f4",
                        warn_quantity_limit_label: "\u8d77\u8d2d%{min_limit}\u4ef6\uff0c\u9650\u8d2d%{max_limit}\u4ef6",
                        warn_quantity_max_validation: "\u8bf7\u8f93\u5165\u5c0f\u4e8e\u7b49\u4e8e%{limit}\u7684\u6570\u91cf",
                        warn_quantity_min_validation: "\u8bf7\u8f93\u5165\u5927\u4e8e\u7b49\u4e8e%{limit}\u7684\u6570\u91cf"
                    },
                    sort_field_note: "\u8bf7\u6309\u7167\u4f18\u5148\u6b21\u5e8f\uff0c\u4f9d\u6b21\u70b9\u51fb\u9009\u9879\u8fdb\u884c\u6392\u5e8f",
                    telephone_field_label: "\u7535\u8bdd",
                    time_field_label: "\u65f6\u95f4",
                    verification_token: "\u9a8c\u8bc1\u7801",
                    warn_add_or_choose_one_field: "\u8bf7\u6dfb\u52a0\u6216\u8005\u9009\u62e9\u4e00\u4e2a\u5b57\u6bb5",
                    warn_address_at_least_choose_one: "\u8bf7\u81f3\u5c11\u9009\u62e9\u5c55\u793a\u4e00\u4e2a\u5730\u5740\u9009\u62e9\u9879",
                    warn_address_set_city_required: "\u52fe\u9009\u533a/\u53bf\u4e4b\u524d\u8bf7\u5148\u52fe\u9009\u5e02",
                    warn_address_set_province_required: "\u8bf7\u5148\u8bbe\u5b9a\u7701",
                    warn_at_least_one_level_one_choice: "\u81f3\u5c11\u9700\u8981\u4e00\u4e2a\u663e\u793a\u7684\u4e00\u7ea7\u9009\u9879",
                    warn_at_least_one_sub_choice: "\u9009\u9879\u300c%{choice}\u300d\u81f3\u5c11\u9700\u8981\u4e00\u4e2a\u663e\u793a\u7684\u4e0b\u7ea7\u9009\u9879",
                    warn_choice_cannot_be_empty: "\u9009\u9879\u4e0d\u80fd\u4e3a\u7a7a",
                    warn_choice_max_length: "\u5b57\u6570\u4e0d\u80fd\u5927\u4e8e%{max_length}",
                    warn_choice_operand_value_temp_validation: "\u8fd0\u7b97\u503c\u5fc5\u987b\u4e3a\u6570\u5b57",
                    warn_choice_quota_temp_validation: "\u8bf7\u8f93\u5165\u975e\u8d1f\u6574\u6570",
                    warn_choice_unnamed_operand_value_unavailable: "\u9009\u9879\u672a\u547d\u540d\u65e0\u6cd5\u8d4b\u503c",
                    warn_common_cannot_be_empty: "\u4e0d\u80fd\u4e3a\u7a7a",
                    warn_common_reach_max: "\u6700\u591a%{max_character_length}\u4e2a\u5b57",
                    warn_customized_validation_reach_max: "\u81ea\u5b9a\u4e49\u51fa\u9519\u6587\u6848\u4e0d\u53ef\u8d85\u8fc750\u4e2a\u5b57\u7b26",
                    warn_default_bigger_than: "\u9ed8\u8ba4\u503c\u5e94\u5f53\u4e0d\u5c0f\u4e8e%{options_min}",
                    warn_default_smaller_than: "\u9ed8\u8ba4\u503c\u5e94\u5f53\u4e0d\u5927\u4e8e%{options_max}",
                    warn_dimension_label_cannot_be_empty: "\u9879\u76ee\u540d\u79f0\u4e0d\u80fd\u4e3a\u7a7a",
                    warn_dimension_label_too_long: "\u9879\u76ee\u540d\u79f0\u4e0d\u53ef\u8d85\u8fc750\u4e2a\u5b57\u7b26",
                    warn_for_cooperators_only: "\u4ec5\u9650\u7ba1\u7406\u5458\u53ef\u89c1",
                    warn_forteen_digits_at_most: "\u5c0f\u6570\u4f4d\u6700\u591a14",
                    warn_good_demension_cannot_be_empty: "\u4ef7\u683c\u5fc5\u987b\u4e3a\u975e\u7a7a\u6570\u5b57",
                    warn_good_demension_empty_or_positive_number: "\u5e93\u5b58\u5fc5\u987b\u4e3a\u975e\u8d1f\u6570\u5b57\u6216\u4e3a\u7a7a",
                    warn_goods_item_inventory_exceed_max: "\u5e93\u5b58\u4e0d\u80fd\u8d85\u8fc75\u4f4d\u6570\u5b57",
                    warn_goods_item_inventory_validation: "\u5e93\u5b58\u5fc5\u987b\u4e3a\u975e\u8d1f\u6570\u5b57\u6216\u4e3a\u7a7a",
                    warn_goods_item_name_cannot_be_empty: "\u5546\u54c1\u540d\u4e0d\u80fd\u4e3a\u7a7a",
                    warn_goods_item_predefined_number_validation: "\u9ed8\u8ba4\u6570\u91cf\u5fc5\u987b\u4e3a\u975e\u8d1f\u6570\u5b57\u6216\u4e3a\u7a7a",
                    warn_goods_item_price_validation: "\u4ef7\u683c\u5fc5\u987b\u4e3a\u975e\u7a7a\u6570\u5b57",
                    warn_integer_required: "\u8bf7\u8f93\u5165\u6b63\u6574\u6570",
                    warn_item_cannot_be_empty: "\u9879\u76ee\u4e0d\u80fd\u4e3a\u7a7a",
                    warn_less_cascade_dropdown_levels: "\u9009\u9879\u7ea7\u6570\u4e0d\u80fd\u5c11\u4e8e\u8bbe\u7f6e\u7684\u7ea7\u6570",
                    warn_load_associable_data_failed: "\u83b7\u53d6\u5173\u8054\u6570\u636e\u5931\u8d25",
                    warn_media_type_cannot_be_empty: "\u81ea\u5b9a\u6587\u4ef6\u683c\u5f0f\u4e0d\u80fd\u4e3a\u7a7a",
                    warn_media_type_support_list: "\u6587\u4ef6\u683c\u5f0f\u4e0d\u5408\u6cd5\uff0c\u4ec5\u652f\u6301\uff1a\u5b57\u6bcd\uff0c\u6570\u5b57\uff0c\u4e0b\u5212\u7ebf\uff0c\u4e2d\u5212\u7ebf\u3002",
                    warn_more_cascade_dropdown_levels: "\u9009\u9879\u7ea7\u6570\u4e0d\u80fd\u5927\u4e8e\u8bbe\u7f6e\u7684\u7ea7\u6570",
                    warn_no_field_selected: "\u6ca1\u6709\u9009\u5b9a\u7684\u5b57\u6bb5",
                    warn_number_required_as_default: "\u9ed8\u8ba4\u503c\u5e94\u8be5\u662f\u4e00\u4e2a\u6570\u5b57",
                    warn_section_break_cannot_be_empty: "\u6807\u9898\u4e0d\u80fd\u4e3a\u7a7a",
                    warn_sms_signature_length: "\u5fc5\u987b\u4e3a2-8\u4e2a\u6c49\u5b57",
                    warn_sms_signature_required: "\u8bf7\u586b\u5199\u7b7e\u540d",
                    warn_title_cannot_be_empty: "\u9898\u76ee\u4e0d\u80fd\u4e3a\u7a7a",
                    white_list_count_text: "\uff08\u5df2\u8bbe%{white_list_count}\u4e2a\uff09",
                    white_list_reset: "\u4fee\u6539"
                },
                form: {
                    add_or_filter_condition: "\u6dfb\u52a0\u201c\u6216\u201d\u5173\u7cfb\u6761\u4ef6",
                    check_client_recovery_conflict: {
                        confirm: "\u6211\u77e5\u9053\u4e86",
                        description: "\u6b64\u8868\u5355\u5df2\u52fe\u9009\u586b\u5199\u65f6\u81ea\u52a8\u4fdd\u5b58\uff0c\u5982\u679c\u60a8\u4fee\u6539\u4e86\u8868\u5355\u5b57\u6bb5\uff0c\u586b\u8868\u8005\u5df2\u4fdd\u5b58\u7684\u5185\u5bb9\u5c06\u5931\u6548\uff0c\u9700\u91cd\u65b0\u586b\u5199\u3002\u8bf7\u614e\u91cd\u7f16\u8f91\u8868\u5355\u5185\u5bb9\u3002",
                        title: "\u8868\u5355\u5df2\u5f00\u542f\u81ea\u52a8\u4fdd\u5b58"
                    },
                    check_unexpected_form_content: "\u7cfb\u7edf\u76d1\u6d4b\u5230\u4f60\u6709\u672a\u4fdd\u5b58\u8868\u5355\uff0c\u662f\u5426\u6062\u590d\u7f16\u8f91\uff1f",
                    check_unexpected_form_title: "\u8868\u5355\u81ea\u52a8\u6062\u590d",
                    city_donot_support_map_report: "\u5e02(\u4e0d\u652f\u6301\u5730\u56fe\u7c7b\u578b)",
                    client_cache_notification: "\u586b\u5199\u5185\u5bb9\u5df2\u81ea\u52a8\u4fdd\u5b58",
                    confirm_leave_share: "\u60a8\u786e\u5b9a\u8981\u89e3\u9664\u5bf9\u8be5\u8868\u5355\u7684\u6240\u6709\u6743\u9650\u5417\uff1f",
                    cooperators: {
                        add: "\u786e\u8ba4\u6dfb\u52a0",
                        external: "\u5916\u90e8\u8054\u7cfb\u4eba",
                        go_assign_ability: "\u4e0b\u4e00\u6b65",
                        internal: "\u5b50\u8d26\u6237",
                        shared: "\u5df2\u5171\u4eab"
                    },
                    date_example: "(\u5982\uff1a2012-12-30)",
                    delete_rule_failed: "\u5220\u9664\u5931\u8d25",
                    delete_rule_success: "\u77ed\u4fe1\u5220\u9664\u6210\u529f",
                    describe_form: "\u63cf\u8ff0\u4f60\u7684\u8868\u5355",
                    field_count_forewarning_html: "\u5f53\u524d\u8868\u5355\u5df2\u6dfb\u52a0\u4e86<span class='highlight'>%{field_count}</span>\u4e2a\u5b57\u6bb5\uff0c<br /> \u79bb\u4e0a\u9650\u8fd8\u5269<span class='highlight'>%{remaining_count}</span>\u4e2a\uff0c\u8bf7\u6ce8\u610f\uff01",
                    fill_form: "\u586b\u5199",
                    fill_form_able_to: "\u53ef\u4ee5",
                    fill_form_everyday_in: "\u6bcf\u5929\u5728",
                    fill_form_in: "\u5728",
                    fill_frequency: {
                        condition: {
                            by_device: "\u6bcf\u53f0\u7535\u8111/\u624b\u673a\u586b\u5199\u4e00\u6b21",
                            by_ip: "\u6bcf\u4e2aIP\u586b\u5199\u4e00\u6b21"
                        },
                        fill_type: {
                            once: "\u9650\u586b\u4e00\u6b21",
                            repeatable_by_day: "\u6bcf\u5929\u9650\u586b\u4e00\u6b21",
                            unlimited: "\u53ef\u4ee5\u586b\u5199"
                        }
                    },
                    form_setting: {
                        fill_rule_condition_warning: "\u6b64\u529f\u80fd\u4ec5\u5728\u5f00\u542f\u6536\u96c6\u5fae\u4fe1\u4fe1\u606f\u65f6\u53ef\u7528\uff0c\u8bf7\u5148\u9009\u62e9\u6536\u96c6\u7528\u6237\u5fae\u4fe1\u4fe1\u606f\u7684\u65b9\u5f0f",
                        submission_authority: {
                            "private": "\u4ec5\u7ba1\u7406\u5458\u53ef\u586b",
                            summary: {
                                gd_user_only: {
                                    once: {
                                        by_device: {
                                            text: "\u91d1\u6570\u636e\u7528\u6237\u53ef\u4ee5\u5728\u6bcf\u53f0\u7535\u8111/\u624b\u673a\u586b\u5199\u4e00\u6b21\u3002"
                                        },
                                        by_ip: {
                                            text: "\u91d1\u6570\u636e\u7528\u6237\u53ef\u4ee5\u5728\u6bcf\u4e2aIP\u586b\u5199\u4e00\u6b21\u3002"
                                        },
                                        by_weixin: {
                                            text: "\u91d1\u6570\u636e\u7528\u6237\u53ef\u4ee5\u5728\u6bcf\u5fae\u4fe1OpenID\u586b\u5199\u4e00\u6b21\u3002"
                                        },
                                        text: "\u91d1\u6570\u636e\u7528\u6237\u9650\u586b\u4e00\u6b21\u3002"
                                    },
                                    repeatable: {
                                        text: "\u91d1\u6570\u636e\u7528\u6237\u53ef\u4ee5%{cycle_period}%{limited_time}\u3002"
                                    },
                                    repeatable_by_day: {
                                        text: "\u91d1\u6570\u636e\u7528\u6237\u6bcf\u5929\u9650\u586b\u4e00\u6b21\u3002"
                                    },
                                    unlimited: {
                                        text: "\u91d1\u6570\u636e\u7528\u6237\u53ef\u4ee5\u586b\u5199\u3002"
                                    }
                                },
                                internal: {
                                    once: {
                                        by_device: {
                                            text: "\u5b50\u8d26\u6237\u53ef\u4ee5\u5728\u6bcf\u53f0\u7535\u8111/\u624b\u673a\u586b\u5199\u4e00\u6b21\u3002"
                                        },
                                        by_ip: {
                                            text: "\u5b50\u8d26\u6237\u53ef\u4ee5\u5728\u6bcf\u4e2aIP\u586b\u5199\u4e00\u6b21\u3002"
                                        },
                                        by_weixin: {
                                            text: "\u5b50\u8d26\u6237\u53ef\u4ee5\u5728\u6bcf\u5fae\u4fe1OpenID\u586b\u5199\u4e00\u6b21\u3002"
                                        }
                                    },
                                    repeatable: {
                                        text: "\u5b50\u8d26\u6237\u53ef\u4ee5\u5728%{cycle_period}%{limited_time}\u3002"
                                    },
                                    unlimited: {
                                        text: "\u5b50\u8d26\u6237\u53ef\u4ee5\u586b\u5199\u3002"
                                    }
                                },
                                "private": {
                                    text: "\u4ec5\u7ba1\u7406\u5458\u53ef\u586b"
                                },
                                "public": {
                                    once: {
                                        by_device: {
                                            text: "\u6240\u6709\u4eba\u53ef\u4ee5\u5728\u6bcf\u53f0\u7535\u8111/\u624b\u673a\u586b\u5199\u4e00\u6b21\u3002"
                                        },
                                        by_ip: {
                                            text: "\u6240\u6709\u4eba\u53ef\u4ee5\u5728\u6bcf\u4e2aIP\u586b\u5199\u4e00\u6b21\u3002"
                                        },
                                        by_weixin: {
                                            text: "\u6240\u6709\u4eba\u53ef\u4ee5\u5728\u6bcf\u5fae\u4fe1OpenID\u586b\u5199\u4e00\u6b21\u3002"
                                        }
                                    },
                                    repeatable: {
                                        by_device: {
                                            text: "\u6240\u6709\u4eba\u53ef\u4ee5%{cycle_period}\u5728\u6bcf\u53f0\u7535\u8111/\u624b\u673a%{limited_time}\u3002"
                                        },
                                        by_ip: {
                                            text: "\u6240\u6709\u4eba\u53ef\u4ee5%{cycle_period}\u5728\u6bcf\u4e2aIP%{limited_time}\u3002"
                                        },
                                        by_weixin: {
                                            text: "\u6240\u6709\u4eba\u53ef\u4ee5%{cycle_period}\u5728\u6bcf\u5fae\u4fe1OpenID%{limited_time}\u3002"
                                        }
                                    },
                                    repeatable_by_day: {
                                        by_device: {
                                            text: "\u6240\u6709\u4eba\u53ef\u4ee5\u6bcf\u5929\u5728\u6bcf\u53f0\u7535\u8111/\u624b\u673a\u586b\u5199\u4e00\u6b21\u3002"
                                        },
                                        by_ip: {
                                            text: "\u6240\u6709\u4eba\u53ef\u4ee5\u6bcf\u5929\u5728\u6bcf\u4e2aIP\u586b\u5199\u4e00\u6b21\u3002"
                                        },
                                        by_weixin: {
                                            text: "\u6240\u6709\u4eba\u53ef\u4ee5\u6bcf\u5929\u5728\u6bcf\u5fae\u4fe1OpenID\u586b\u5199\u4e00\u6b21\u3002"
                                        }
                                    },
                                    unlimited: {
                                        text: "\u6240\u6709\u4eba\u53ef\u4ee5\u586b\u5199\u3002"
                                    }
                                },
                                weixin_collect_way_html: '<span class="weixin-collect-way-text">\uff08\u901a\u8fc7%{weixin_account}\u6536\u96c6\u7528\u6237\u4fe1\u606f\uff09</span>',
                                weixin_followers_only: {
                                    once: {
                                        by_device: {
                                            text: "\u5fae\u4fe1\u7c89\u4e1d\u53ef\u4ee5\u5728\u6bcf\u53f0\u7535\u8111/\u624b\u673a\u586b\u5199\u4e00\u6b21\u3002"
                                        },
                                        by_ip: {
                                            text: "\u5fae\u4fe1\u7c89\u4e1d\u53ef\u4ee5\u5728\u6bcf\u4e2aIP\u586b\u5199\u4e00\u6b21\u3002"
                                        },
                                        by_weixin: {
                                            text: "\u5fae\u4fe1\u7c89\u4e1d\u53ef\u4ee5\u5728\u6bcf\u5fae\u4fe1OpenID\u586b\u5199\u4e00\u6b21\u3002"
                                        }
                                    },
                                    repeatable: {
                                        text: "\u5fae\u4fe1\u7c89\u4e1d\u53ef\u4ee5%{cycle_period}%{limited_time}\u3002"
                                    },
                                    unlimited: {
                                        text: "\u5fae\u4fe1\u7c89\u4e1d\u53ef\u4ee5\u586b\u5199\u3002"
                                    }
                                },
                                weixin_limited: {
                                    "false": "\u5728\u6240\u6709\u8bbe\u5907\u4e2d\uff0c",
                                    "true": "\u4ec5\u9650\u5728\u5fae\u4fe1/\u4f01\u4e1a\u5fae\u4fe1\u4e2d\uff0c"
                                },
                                weixin_qiye_followers_only: {
                                    once: {
                                        by_device: {
                                            text: "\u4f01\u4e1a\u5fae\u4fe1\u6210\u5458\u53ef\u4ee5\u5728\u6bcf\u53f0\u7535\u8111/\u624b\u673a\u586b\u5199\u4e00\u6b21\u3002"
                                        },
                                        by_ip: {
                                            text: "\u4f01\u4e1a\u5fae\u4fe1\u6210\u5458\u53ef\u4ee5\u5728\u6bcf\u4e2aIP\u586b\u5199\u4e00\u6b21\u3002"
                                        },
                                        by_weixin: {
                                            text: "\u4f01\u4e1a\u5fae\u4fe1\u6210\u5458\u53ef\u4ee5\u5728\u6bcf\u5fae\u4fe1OpenID\u586b\u5199\u4e00\u6b21\u3002"
                                        }
                                    },
                                    repeatable: {
                                        text: "\u4f01\u4e1a\u5fae\u4fe1\u6210\u5458\u53ef\u4ee5%{cycle_period}%{limited_time}\u3002"
                                    },
                                    unlimited: {
                                        text: "\u4f01\u4e1a\u5fae\u4fe1\u6210\u5458\u53ef\u4ee5\u586b\u5199\u3002"
                                    }
                                }
                            }
                        },
                        weixin_qiye: "\u901a\u8fc7\u60a8\u81ea\u5df1\u7684\u4f01\u4e1a\u5fae\u4fe1\u53f7\u6765\u6536\u96c6",
                        weixin_qiye_disabled: "\u901a\u8fc7\u60a8\u81ea\u5df1\u7684\u4f01\u4e1a\u5fae\u4fe1\u53f7\u6765\u6536\u96c6(\u53ea\u652f\u6301\u5728\u4f01\u4e1a\u5fae\u4fe1\u4e2d\u586b\u5199)"
                    },
                    input_form_name: "\u8bf7\u8f93\u5165\u8868\u5355\u540d",
                    leave_with_unsaved: "\u4f60\u7684\u8868\u5355\u6709\u4e9b\u4fee\u6539\u5c1a\u672a\u4fdd\u5b58\uff0c\u662f\u5426\u786e\u5b9a\u8981\u79bb\u5f00\uff1f",
                    max_bulk_image_upload: "\u6bcf\u6b21\u8bf7\u4e0d\u8981\u9009\u62e9\u8d85\u8fc75\u5f20\u56fe\u7247\uff0c\u53ef\u4f20\u591a\u6b21\u3002",
                    metrics: {
                        fill: "\u586b\u5199",
                        search: "\u67e5\u8be2",
                        view: "\u6d4f\u89c8"
                    },
                    paused_pushing_notification: "\u5df2\u6682\u505c",
                    pushing_notification: "\u63a8\u9001\u4e2d",
                    pushing_test_notification: "\u6d4b\u8bd5",
                    pushing_test_notification_success: "\u63a8\u9001\u6d4b\u8bd5\u6d88\u606f\u6210\u529f",
                    reached_max: "\u534f\u4f5c\u5e2d\u4f4d\u5df2\u8fbe\u4e0a\u9650\uff0c\u65e0\u6cd5\u7ee7\u7eed\u6dfb\u52a0\u3002",
                    save_setting_failed: "\u4fdd\u5b58\u8bbe\u7f6e\u5931\u8d25",
                    save_setting_success: "\u4fdd\u5b58\u8bbe\u7f6e\u6210\u529f",
                    search_condition: "\u67e5\u8be2\u6761\u4ef6\uff1a",
                    select_file_to_upload: "\u8bf7\u9009\u62e9\u6216\u62d6\u62fd\u4e0a\u4f20\u6587\u4ef6\uff0c%{max_size}MB\u4ee5\u5185\u3002",
                    select_file_to_upload_with_max_quantity: "\u8bf7\u9009\u62e9\u6216\u62d6\u62fd\u4e0a\u4f20\u6587\u4ef6\uff08\u6700\u591a %{max_file_quantity}\u4e2a\uff09\uff0c\u9650\u5236\u6bcf\u4e2a%{max_size}MB\u4ee5\u5185\u3002",
                    setting_saved_failed: "\u8bbe\u7f6e\u4fdd\u5b58\u5931\u8d25",
                    setting_saved_success: "\u8bbe\u7f6e\u4fdd\u5b58\u6210\u529f",
                    switch_to_simple_mode: "\u5207\u6362\u5230\u7b80\u5355\u6a21\u5f0f",
                    switch_to_upgrade_mode: "\u5207\u6362\u5230\u9ad8\u7ea7\u6a21\u5f0f",
                    theme: {
                        chuangkit_label: "\u521b\u5ba2\u8d34",
                        fail_to_launch_chuangkit: "\u6253\u5f00\u521b\u5ba2\u8d34\u5931\u8d25",
                        max_carousel_images_upload: "\u4e3a\u4fdd\u8bc1\u5c55\u793a\u6548\u679c\uff0c\u8bf7\u52ff\u4e0a\u4f20\u8d85\u8fc75\u5f20\u56fe\u7247\u3002",
                        upload_header_from_local: "\u4e0a\u4f20",
                        warn_submit_btn_text_reach_max: "\u8bf7\u8f93\u5165\u6700\u591a%{options_max}\u4e2a\u5b57",
                        warn_submit_btn_text_required: "\u8bf7\u8f93\u5165\u63d0\u4ea4\u6309\u94ae\u6587\u5b57\u5185\u5bb9"
                    },
                    unnamed_form: "\u672a\u547d\u540d\u8868\u5355",
                    upload_file_only_support: "\u4ec5\u652f\u6301:",
                    warn_at_least_show_one_option: "\u81f3\u5c11\u663e\u793a\u4e00\u4e2a\u9009\u9879",
                    warn_cannot_hidden_field_with_rule: "\u5df2\u8bbe\u7f6e\u597d\u89c4\u5219\u7684\u9009\u9879\u4e0d\u53ef\u9690\u85cf",
                    warn_check_internet: "\uff1a\u8bf7\u68c0\u67e5\u4f60\u7684\u7f51\u7edc\u8fde\u63a5",
                    warn_field_limited: "\u5b57\u6bb5\u9650\u5236\u63d0\u9192",
                    warn_invalid_data_range: "\u7ed3\u675f\u65f6\u95f4\u4e0d\u80fd\u65e9\u4e8e\u5f00\u59cb\u65f6\u95f4",
                    warn_load_entries_failed: "\u63d0\u9192\u6570\u636e\u52a0\u8f7d\u5931\u8d25",
                    warn_setting_reach_max_params: "\u6700\u591a\u53ef\u4ee5\u9009\u62e93\u4e2a\u9644\u52a0\u53c2\u6570",
                    warn_valid_url_required: "\u8bf7\u8f93\u5165\u5408\u6cd5\u7684URL\u5730\u5740\uff0c\u4f8b\u5982\uff1ahttp://jinshuju.net/callback",
                    warn_weixin_cannot_collect_data: "\u4e0d\u80fd\u4f7f\u7528\u91d1\u6570\u636e\u8d26\u53f7\u6536\u96c6\u5fae\u4fe1\u4fe1\u606f",
                    warn_weixin_setting_html: "\u56e0\u4e3a\u8be5\u8868\u5355\u8bbe\u7f6e\u6709\u4f60\u81ea\u5df1\u7684\u5fae\u4fe1\u652f\u4ed8\u8d26\u53f7\uff0c\u6216\u8005\u8be5\u8868\u5355\u8bbe\u7f6e\u7684Ping++ \u652f\u4ed8\u4e2d\u542f\u7528\u4e86\u5fae\u4fe1\u652f\u4ed8\u3002</br></br>\u4f60\u53ea\u80fd\u9009\u62e9\u4f7f\u7528\u81ea\u5df1\u7684\u5fae\u4fe1\u516c\u4f17\u8d26\u53f7\u8fdb\u884c\u5fae\u4fe1\u7528\u6237\u6570\u636e\u6536\u96c6\uff0c\u8bf7\u91cd\u65b0\u9009\u62e9\u3002",
                    warn_wrong_params: "\u8f93\u5165\u53c2\u6570\u9519\u8bef"
                },
                global: {
                    copy_success: "\u590d\u5236\u6210\u529f",
                    disable_for_e_qq_html: '<label><strong>\u5df2\u5f00\u542f\u817e\u8baf\u5e7f\u544a\u63a8\u5e7f</strong></label>\n<div class="text-muted">\n  \u5f53\u524d\u8868\u5355\u5df2\u7ecf\u751f\u6210\u6295\u653e\u94fe\u63a5\u5e76\u5728\u817e\u8baf\u793e\u4ea4\u5e7f\u544a\u4e2d\u8fdb\u884c\u6295\u653e\uff0c\u8be5\u884c\u4e3a\u5c06\u9650\u5236\u8868\u5355\u7684\u7f16\u8f91\u64cd\u4f5c\u3002\u5982\u9700\u4fee\u6539\u8868\u5355\u6211\u4eec\u5efa\u8bae\u4f60\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u8fdb\u884c\u64cd\u4f5c\u3002<a href="#tooltip_promot_process" data-toggle="collapse" class="click-to-view">\u70b9\u51fb\u67e5\u770b\u64cd\u4f5c\u6b65\u9aa4</a>\n  <div id="tooltip_promot_process" class="collapse">\n    ---------------------------------------------\n    <ul>\n      <li>\u7b2c\u4e00\u6b65\uff1a\u590d\u5236\u9700\u8981\u6295\u653e\u7684\u8868\u5355 </li>\n      <li>\u7b2c\u4e8c\u6b65\uff1a\u5728\u65b0\u8868\u5355\u4e2d\u8fdb\u884c\u8868\u5355\u7684\u5b57\u6bb5\u7684\u589e\u51cf\uff0c\u5b8c\u5584\u8868\u5355\u89c4\u5219\u548c\u76f8\u5173\u8bbe\u7f6e</li>\n      <li>\u7b2c\u4e09\u6b65\uff1a\u5728\u53d1\u5e03-\u8868\u5355\u63a8\u5e7f\u9875\u9762\u4e2d\u751f\u6210\u63a8\u5e7f\u94fe\u63a5</li>\n      <li>\u7b2c\u56db\u6b65\uff1a\u524d\u5f80\u817e\u8baf\u793e\u4ea4\u5e7f\u544a\u5e73\u53f0\uff0c\u624b\u5de5\u590d\u5236\u65b0\u8868\u5355\u7684\u63a8\u5e7f\u94fe\u63a5\u66ff\u6362\u539f\u5e7f\u544a\u4e2d\u7684\u63a8\u5e7f\u94fe\u63a5</li>\n    </ul>\n  </div>\n</div>\n',
                    follow_our_wechat: "\u5173\u6ce8\u91d1\u6570\u636e\u516c\u4f17\u53f7",
                    login: "\u91d1\u6570\u636e - \u6ce8\u518c",
                    mac_copy_shortcut: "\u4f7f\u7528\u2318-C\u590d\u5236",
                    no_result: "\u6ca1\u6709\u5339\u914d\u7684\u641c\u7d22\u7ed3\u679c",
                    notification: {
                        email_invalid: "\u53d1\u9001\u81f3\u90ae\u7bb1\u683c\u5f0f\u4e0d\u5bf9",
                        invalid_values: "\u53d1\u9001\u81f3\u90ae\u7bb1/\u624b\u673a\u53f7\u683c\u5f0f\u4e0d\u5bf9",
                        loading: "\u8bfb\u53d6\u4e2d...",
                        mobile_invalid: "\u53d1\u9001\u81f3\u53f7\u7801\u683c\u5f0f\u4e0d\u5bf9\uff08\u4ec5\u652f\u6301\u4e2d\u56fd\u5927\u9646\u53f7\u7801\u53d1\u9001\uff09",
                        no_new_message: "\u6682\u65e0\u65b0\u6d88\u606f"
                    },
                    others_copy_shortcut: "\u4f7f\u7528Ctrl-C\u590d\u5236",
                    payment: {
                        confirm_to_pay: "\u786e\u8ba4\u652f\u4ed8",
                        confirm_upgrade: "\u786e\u8ba4\u5347\u7ea7",
                        create_payment_failed: "\u521b\u5efa\u652f\u4ed8\u5931\u8d25",
                        page_expired: "\u9875\u9762\u8fc7\u671f\uff0c\u8bf7\u5237\u65b0\u91cd\u65b0\u5c1d\u8bd5",
                        paid_description_html: "\u5219\u539f\u5957\u9910\u62b5\u6263\u540e\uff0c\u8fd8\u5269\u4f59<span class='highlight'>\uffe5%{refund_price}</span>\uff0c\u5c06\u4ee5\u4f59\u989d\u7684\u5f62\u5f0f\uff0c\u9000\u56de\u5230\u4f60\u7684\u91d1\u6570\u636e\u8d26\u6237\u4e2d\u3002",
                        paid_success: "\u5145\u503c\u6210\u529f",
                        pay_diff_with_origin_price_to_finish_upgrade: "\u9700\u8981\u652f\u4ed8\u76f8\u5e94\u5dee\u4ef7\u5b8c\u6210\u5347\u7ea7\u3002",
                        scan_alipay_to_pay: "\u652f\u4ed8\u5b9d\u626b\u7801\u652f\u4ed8\u91d1\u989d\uff1a %{total_price} \u5143",
                        scan_weixin_to_pay: "\u5fae\u4fe1\u626b\u7801\u652f\u4ed8\u91d1\u989d\uff1a %{total_price} \u5143",
                        topup_account: "\u8d26\u6237\u5145\u503c",
                        upgrade_success: "\u5347\u7ea7\u6210\u529f",
                        warn_get_weixin_info_failed: "\u5fae\u4fe1\u4fe1\u606f\u83b7\u53d6\u5931\u8d25\uff0c\u8bf7\u5237\u65b0\u9875\u9762"
                    },
                    plan: {
                        per_month: "\u6708",
                        per_year: "\u5e74",
                        warn_network_error_refresh: "\u7f51\u7edc\u51fa\u9519\uff0c\u8bf7\u5237\u65b0\u91cd\u8bd5"
                    },
                    qrcode: {
                        filename: "\u4e8c\u7ef4\u7801",
                        large_size: "\u5927\u53f7",
                        medium_size: "\u4e2d\u53f7",
                        small_size: "\u5c0f\u53f7",
                        warn_no_qrcode_file: "\u6ca1\u6709\u4f20\u5165\u4e8c\u7ef4\u7801\u6587\u672c"
                    },
                    share: {
                        to_mingdao: "\u5206\u4eab\u5230\u660e\u9053",
                        to_qzone: "\u5206\u4eab\u5230QZONE",
                        to_weibo: "\u5206\u4eab\u5230\u5fae\u535a"
                    },
                    signup: "\u91d1\u6570\u636e - \u767b\u5f55",
                    sms: {
                        at_least: "\u81f3\u5c11",
                        description_html: '<div class="count-info"><span class="has-fields-1"></span>\u5df2\u8f93\u5165<span class="char-count"></span>\u4e2a\u5b57\uff08\u542b\u7b7e\u540d<span class="extra-info"></span>\uff09\uff0c<span class="has-fields-2"></span>\u6309<span class="sms-count"></span>\u6761\u8ba1\u8d39</div>',
                        except_fields: "\u9664\u8868\u5355\u5b57\u6bb5\uff0c",
                        include_link_hint: "\u68c0\u6d4b\u5230\u77ed\u4fe1\u5185\u5bb9\u4e2d\u5305\u542b\u94fe\u63a5\uff0c\u8bf7\u5728\u94fe\u63a5\u524d\u540e\u6dfb\u52a0\u7a7a\u683c\uff0c\u4ee5\u786e\u4fdd\u63a5\u6536\u8005\u53ef\u5728\u77ed\u4fe1\u4e2d\u6b63\u5e38\u6253\u5f00\u94fe\u63a5\u3002",
                        preview: "\u77ed\u4fe1\u9884\u89c8",
                        send: "\u53d1\u9001\u77ed\u4fe1",
                        warn_reach_max_length: "\u8f93\u5165\u5b57\u7b26\u8d85\u8fc7%{max_length}\u5b57\u53d1\u9001\u9650\u5236\uff0c\u8bf7\u5220\u51cf\u77ed\u4fe1\u5185\u5bb9"
                    },
                    validator: {
                        condition_required: "\u8bf7\u9009\u62e9\u6761\u4ef6",
                        duplicate_group: "\u67e5\u8be2\u6761\u4ef6\u91cd\u590d\uff0c\u8bf7\u91cd\u65b0\u9009\u62e9",
                        email_format: "\u8bf7\u8f93\u5165\u6b63\u786e\u683c\u5f0f\u7684\u90ae\u7bb1",
                        email_or_mobile_format: "\u8bf7\u8f93\u5165\u6b63\u786e\u624b\u673a\u53f7",
                        email_required: "\u8bf7\u8f93\u5165\u90ae\u7bb1",
                        mobile_format: "\u8bf7\u8f93\u5165\u6b63\u786e\u7684\u5927\u9646\u624b\u673a\u53f7",
                        nickname_format: "\u6635\u79f0\u4ec5\u652f\u6301\u4e2d\u82f1\u6587\u3001\u6570\u5b57\u548c\u4e0b\u5212\u7ebf",
                        phone_required: "\u8bf7\u8f93\u5165\u624b\u673a\u53f7\u7801",
                        verification_code_required: "\u8bf7\u8f93\u5165\u624b\u673a\u9a8c\u8bc1\u7801"
                    },
                    warn_browser_not_supported: "\u60a8\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u76f4\u63a5\u590d\u5236\uff0c\u8bf7\u624b\u52a8\u590d\u5236\uff01"
                },
                global_search: {
                    template_market_entrance_text: '\u67e5\u770b\u66f4\u591a"%{keyword}"\u6a21\u677f'
                },
                onboarding: {
                    forgot_password: {
                        warn_account_cannot_be_empty: "\u8d26\u53f7\u4e0d\u80fd\u4e3a\u7a7a",
                        warn_invalid_email: "\u8d26\u53f7\u5c1a\u672a\u6ce8\u518c<a href=/signup>\u70b9\u6b64\u6ce8\u518c\u8d26\u53f7</a>"
                    },
                    warn: {
                        account_cannot_be_empty: "\u624b\u673a\u53f7\u4e0d\u80fd\u4e3a\u7a7a",
                        account_in_use: "\u90ae\u7bb1\u6216\u8005\u624b\u673a\u53f7\u5df2\u88ab\u5360\u7528",
                        captcha_cannot_be_empty: "\u9a8c\u8bc1\u7801\u4e0d\u80fd\u4e3a\u7a7a",
                        captcha_invalid: "\u9a8c\u8bc1\u7801\u6709\u8bef",
                        confirm_password_cannot_be_empty: "\u786e\u8ba4\u5bc6\u7801\u4e0d\u80fd\u4e3a\u7a7a",
                        confirm_password_min_length: "\u786e\u8ba4\u5bc6\u7801\u4e0d\u80fd\u5c0f\u4e8e6\u4f4d",
                        email_cannot_be_empty: "\u90ae\u7bb1\u4e0d\u80fd\u4e3a\u7a7a",
                        email_format_invalid: "\u8bf7\u8f93\u5165\u6b63\u786e\u683c\u5f0f\u7684\u90ae\u7bb1",
                        invalid_email: "\u90ae\u7bb1\u5df2\u88ab\u5360\u7528",
                        mobile_cannot_be_empty: "\u624b\u673a\u53f7\u4e0d\u80fd\u4e3a\u7a7a",
                        mobile_format_invalid: "\u8bf7\u8f93\u5165\u6b63\u786e\u7684\u624b\u673a\u53f7",
                        nickname_in_use: "\u6635\u79f0\u5df2\u88ab\u5360\u7528",
                        nickname_reach_max: "\u6635\u79f0\u957f\u5ea6\u5e94\u57282~20\u4e2a\u5b57\u4e4b\u95f4",
                        password_cannot_be_empty: "\u5bc6\u7801\u4e0d\u80fd\u4e3a\u7a7a",
                        password_min_length: "\u8bf7\u8f93\u5165\u81f3\u5c116\u4f4d\u5bc6\u7801",
                        weixin_account_in_use: "\u8be5\u5fae\u4fe1\u53f7\u5df2\u88ab\u5360\u7528,\u8bf7\u66f4\u6362\u5fae\u4fe1\u53f7"
                    }
                },
                published_form: {
                    warn_get_weixin_info_failed: "\u5fae\u4fe1\u4fe1\u606f\u83b7\u53d6\u5931\u8d25\uff0c\u8bf7\u91cd\u65b0\u6253\u5f00\u8868\u5355"
                },
                report: {
                    sort_field_hide_detail_title_html: '\u9690\u85cf\u5404\u9009\u9879\u6570\u636e<i class="gd-icon-angle-double-up"></i>',
                    sort_field_show_detail_title_html: '\u663e\u793a\u5404\u9009\u9879\u6570\u636e<i class="gd-icon-angle-double-down"></i>'
                },
                shopping_cart: {
                    header: {
                        count: "\u6570\u91cf",
                        goods_name: "\u5546\u54c1",
                        price: "\u5355\u4ef7",
                        seleted_goods: "\u5df2\u9009\u62e9\u5546\u54c1",
                        total_price: "\u5c0f\u8ba1"
                    }
                },
                template: {
                    action_failed: "\u64cd\u4f5c\u5931\u8d25",
                    comment_failed: "\u8bc4\u8bba\u5931\u8d25",
                    comment_success: "\u8bc4\u8bba\u6210\u529f",
                    expand: "\u5c55\u5f00\u663e\u793a\u5168\u90e8",
                    warn_reach_max_industries: "\u6700\u591a\u53ef\u4ee5\u9009\u62e93\u4e2a\u884c\u4e1a"
                },
                third_party: {
                    alipay_pay: "\u652f\u4ed8\u5b9d",
                    alipay_to_pay: "\u652f\u4ed8\u5b9d\u652f\u4ed8",
                    embedded_others: "\u4e0d\u80fd\u81ea\u9002\u5e94\u9ad8\u5ea6\uff0c\u8c28\u614e\u4f7f\u7528\u3002",
                    embedded_script: "\u53ef\u4ee5\u81ea\u9002\u5e94\u9ad8\u5ea6\uff0c\u63a8\u8350\u4f7f\u7528\u3002",
                    paid: "\u5df2\u4ed8\u6b3e",
                    unpaid: "\u672a\u4ed8\u6b3e",
                    warn_failed_to_pay_resubmit: "\u652f\u4ed8\u672a\u6210\u529f\uff0c\u8bf7\u91cd\u65b0\u63d0\u4ea4\u8868\u5355",
                    warn_retrieve_qrcode_failed: "\u83b7\u53d6\u652f\u4ed8\u4e8c\u7ef4\u7801\u5931\u8d25\uff0c%{err_msg}\u3002",
                    warn_retrieve_wxpay_failed: "\u8c03\u7528\u652f\u4ed8\u63a7\u4ef6\u5931\u8d25: %{err_msg}\u3002",
                    warn_retrieve_wxpay_qrcode_failed: "\u83b7\u53d6\u5fae\u4fe1\u652f\u4ed8\u4e8c\u7ef4\u7801\u5931\u8d25: %{err_msg}\u3002",
                    warn_retrieve_wxpay_qrcode_timeout: "\u83b7\u53d6\u5fae\u4fe1\u652f\u4ed8\u4e8c\u7ef4\u7801\u8d85\u65f6\uff0c\u8bf7\u91cd\u65b0\u63d0\u4ea4\u652f\u4ed8",
                    warn_verify_weixin_setting: "\u8bf7\u68c0\u67e5\u5fae\u4fe1\u652f\u4ed8\u7684\u53c2\u6570\u662f\u5426\u914d\u7f6e\u6b63\u786e\uff0c\u6216\u8005\u5e94\u7528\u5bc6\u94a5\u548c\u5546\u6237\u652f\u4ed8\u5bc6\u94a5\u662f\u5426\u5df2\u66f4\u6539\u3002",
                    weixin_pay: "\u5fae\u4fe1\u652f\u4ed8"
                },
                user: {
                    bind_weixin_fail: "\u7ed1\u5b9a\u5fae\u4fe1\u63d0\u9192\u7ed1\u5b9a\u5931\u8d25",
                    bind_weixin_fail_text: "%{fail_message}\u3002\uff08\u8bf7\u66f4\u6362\u5fae\u4fe1 \u6216 \u767b\u5f55\u8be5\u8d26\u6237\u89e3\u7ed1\u540e\u64cd\u4f5c\uff09",
                    bind_weixin_success: "\u7ed1\u5b9a\u5fae\u4fe1\u63d0\u9192\u6210\u529f",
                    bind_weixin_success_text: "\u4f60\u73b0\u5728\u5c31\u53ef\u4ee5\u5b9e\u65f6\u63a5\u6536\u5230\u65b0\u6570\u636e\u5fae\u4fe1\u63d0\u9192\u4e86",
                    branding_off: "\u5df2\u5173\u95ed\u9690\u85cfLogo",
                    branding_on: "\u5df2\u5f00\u542f\u9690\u85cfLogo",
                    btn_disable_cname: "\u505c\u7528\u81ea\u5b9a\u4e49\u57df\u540d",
                    btn_enable_cname: "\u5f00\u542f\u81ea\u5b9a\u4e49\u57df\u540d",
                    change_from_role_to: "\u60a8\u786e\u5b9a\u8981\u5c06\u81ea\u5df1\u4ece%{origin_role}\u964d\u4e3a%{selected_role}\u5417?",
                    confirm_no_error: "\u786e\u8ba4\u65e0\u8bef",
                    delete_role_title: "\u60a8\u786e\u5b9a\u8981\u89e3\u9664\u5bf9\u8be5\u8868\u5355\u7684\u6240\u6709\u6743\u9650\u5417\uff1f",
                    delete_setting_failed: "\u5220\u9664\u8bbe\u7f6e\u5931\u8d25",
                    delete_setting_success: "\u5220\u9664\u8bbe\u7f6e\u6210\u529f",
                    hide_usage_detail: "\u9690\u85cf\u8be6\u7ec6\u4f7f\u7528\u91cf",
                    open_weixin_pay: "\u540c\u65f6\u5f00\u542f\u5fae\u4fe1\u652f\u4ed8\u914d\u7f6e",
                    show_usage_detail: "\u67e5\u770b\u8be6\u7ec6\u4f7f\u7528\u91cf",
                    submitting: "\u63d0\u4ea4\u4e2d",
                    turn_off_custom_domain_content: "\u5982\u679c\u5173\u95ed\u81ea\u5b9a\u4e49\u57df\u540d\uff0c\u4e4b\u524d\u4f7f\u7528\u8be5\u57df\u540d\u7684\u8868\u5355\u53ca\u5e94\u7528\u5c06\u65e0\u6cd5\u6b63\u5e38\u8bbf\u95ee\u3002\u786e\u8ba4\u5173\u95ed\u4e48\uff1f",
                    turn_off_custom_domain_title: "\u5173\u95ed\u81ea\u5b9a\u4e49\u57df\u540d",
                    update_nickname_failed: "\u66f4\u65b0\u6635\u79f0\u5931\u8d25",
                    update_nickname_success: "\u66f4\u65b0\u6635\u79f0\u6210\u529f",
                    verify_email_sent: "\u9a8c\u8bc1\u90ae\u4ef6\u5df2\u53d1\u9001\uff0c\u8bf7\u67e5\u6536",
                    warn_item_cannot_be_empty: "\u8be5\u9879\u4e0d\u80fd\u4e3a\u7a7a",
                    warn_network_error_retry: "\u7f51\u7edc\u51fa\u9519\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5",
                    warn_nickname_cannot_be_empty: "\u6635\u79f0\u4e0d\u80fd\u4e3a\u7a7a",
                    warn_permission_denied: "\u4f60\u65e0\u6743\u8fdb\u884c\u6b64\u64cd\u4f5c",
                    warn_send_email_fail_retry: "\u53d1\u9001\u9a8c\u8bc1\u90ae\u4ef6\u5931\u8d25\uff0c\u8bf7\u7a0d\u540e\u91cd\u8bd5",
                    warn_too_many_actions_retry: "\u9891\u7e41\u64cd\u4f5c\uff0c\u8bf7\u4e8e1\u5206\u949f\u540e\u91cd\u8bd5\u3002",
                    warn_update_nickname_failed: "\u4fdd\u5b58\u65f6\u53d1\u751f\u4e86\u9519\u8bef",
                    warn_verify_weixin_failed_retry: "\u5fae\u4fe1\u516c\u4f17\u8d26\u53f7\u9a8c\u8bc1\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5"
                },
                warning: {
                    browser_version_too_low: "\u60a8\u4f7f\u7528\u7684\u6d4f\u89c8\u5668\u7248\u672c\u8f83\u4f4e\uff0c\u8bf7\u5347\u7ea7\u5230IE10\u6216\u4f7f\u7528",
                    get_better_experience: "\u83b7\u5f97\u66f4\u4f73\u4f53\u9a8c\u3002",
                    google_browser: "\u8c37\u6b4c\u6d4f\u89c8\u5668",
                    warn_entry_quota_used_up: "\u4f60\u672c\u6708\u6570\u636e\u6d41\u91cf\u5df2\u7528\u5b8c\uff0c\u8bf7\u53ca\u65f6\u5347\u7ea7\u5957\u9910\u6216\u5145\u503c"
                },
                yunpian_template: {
                    audit_sms: "\u53d1\u8d77\u5ba1\u6838",
                    change_template_disabled_reason: "\u77ed\u4fe1\u6a21\u677f\u5ba1\u6838\u4e2d\uff0c\u4e0d\u53ef\u4fee\u6539\u3002",
                    create_template_disabled_reason: "\u53ea\u6709\u5728\u65b0\u5efa\u63a8\u9001\u63d0\u9192\u65f6\u624d\u53ef\u521b\u5efa\u65b0\u6a21\u677f",
                    han_only_signature: "\u77ed\u4fe1\u7b7e\u540d\u4e0d\u80fd\u4e3a\u7eaf\u82f1\u6587\u6216\u6570\u5b57",
                    invalid_condition_value: "\u63a8\u9001\u6570\u636e\u6761\u4ef6\u4e0d\u80fd\u4e3a\u7a7a",
                    invalid_content: "\u8bf7\u586b\u5199\u77ed\u4fe1\u5185\u5bb9",
                    invalid_recipient_api_code: "\u53d1\u9001\u81f3\u6761\u4ef6\u4e0d\u80fd\u4e3a\u7a7a",
                    invalid_recipients: "\u672a\u627e\u5230\u53ef\u53d1\u9001\u7684\u624b\u673a\u53f7\u7801",
                    invalid_send_timing: "\u8bf7\u9009\u62e9\u53d1\u9001\u65f6\u95f4",
                    invalid_signature: "\u8bf7\u586b\u5199\u77ed\u4fe1\u7b7e\u540d",
                    invalid_signature_length: "\u77ed\u4fe1\u7b7e\u540d\u957f\u5ea6\u57282-10\u4e2a\u5b57\u4e4b\u95f4",
                    invalid_sms_template: "\u8bf7\u9009\u62e9\u4e00\u4e2a\u77ed\u4fe1\u6a21\u677f",
                    marketing_channel: "\u8425\u9500\u77ed\u4fe1",
                    normal_channel: "\u666e\u901a\u77ed\u4fe1",
                    not_support_sms_when_intl_mobile_no: "\u56fd\u9645\u624b\u673a\u53f7\u6682\u4e0d\u652f\u6301\u53d1\u9001\u77ed\u4fe1\uff0c\u56fd\u5185\u624b\u673a\u53f7\u4e0d\u53d7\u5f71\u54cd",
                    replace_variable_placeholder: "<\u70b9\u51fb\u63d2\u5165\u5b57\u6bb5>",
                    reuse_template_disabled_reason: "\u5f53\u524d\u6ca1\u6709\u5df2\u5ba1\u6838\u901a\u8fc7\u7684\u6a21\u677f",
                    send_data: {
                        all_data: "\u6240\u6709\u65b0\u589e\u6570\u636e",
                        special_data: "\u6240\u6709%{field}\u4e3a%{value}\u7684\u6570\u636e"
                    },
                    send_failed_retry: "\u91cd\u53d1\u5931\u8d25, \u8bf7\u91cd\u8bd5",
                    send_sms: "\u53d1\u9001\u77ed\u4fe1",
                    send_timing: {
                        datetime: "%{year}\u5e74%{month}%{day}\u65e5\u7684%{hour}\u65f6%{minute}\u5206",
                        immediately: "\u7acb\u5373\u53d1\u9001",
                        on_specified_datetime: "\u5c06\u5728%{datetime}\u53d1\u9001",
                        scheduled_with_rule: "\u5c06\u5728%{field}%{date_offset_number}%{date_offset_unit}%{date_offset_action}\u7684%{hour}\u65f6%{minute}\u5206\u53d1\u9001"
                    },
                    send_to: {
                        form_field: "\u586b\u5199\u7684%{field}"
                    },
                    sms_template_placeholder: "\u8bf7\u9009\u62e9",
                    yunpian_channel_disabled_reason: "\u5df2\u5ba1\u6838\u6210\u529f/\u5ba1\u6838\u4e2d\u7684\u77ed\u4fe1\u6a21\u677f\u4e0d\u53ef\u4fee\u6539\u77ed\u4fe1\u7c7b\u578b"
                }
            }
        },
        "zh-TW": {
            javascript: {
                account_deletion: {
                    confirm_to_delete: "\u78ba\u8a8d\u8a3b\u92b7"
                },
                application: {
                    revoke: {
                        additional_msg: "\u5982\u9700\u91cd\u65b0\u7d81\u5b9a\uff0c%{action}",
                        "default": "\u4f60\u78ba\u5b9a\u8981\u89e3\u9664\u6d3b\u52d5\u201c%{app_name}\u201d\u8207\u7576\u524d\u8868\u55ae\u7684\u7d81\u5b9a\u55ce\uff1f\u89e3\u7d81\u5f8c\uff0c\u539f\u5148\u88ab\u8a72\u6d3b\u52d5\u9396\u5b9a\u7684\u8868\u55ae\u8a2d\u7f6e\u5c07\u5141\u8a31\u4fee\u6539\uff0c\u4f46\u8a72\u6d3b\u52d5\u5c07\u4e0d\u53ef\u7e7c\u7e8c\u9032\u884c\u3002",
                        fail_message: "\u89e3\u7d81\u5931\u6557",
                        gd_coupons: "\u4f60\u78ba\u5b9a\u8981\u89e3\u9664\u512a\u60e0\u78bc\u201c%{app_name}\u201d\u8207\u7576\u524d\u8868\u55ae\u7684\u7d81\u5b9a\u55ce\uff1f\u89e3\u7d81\u5f8c\uff0c\u539f\u5148\u88ab\u8a72\u512a\u60e0\u78bc\u6d3b\u52d5\u9396\u5b9a\u7684\u8868\u55ae\u8a2d\u7f6e\u5c07\u5141\u8a31\u4fee\u6539\uff0c\u4f46\u8a72\u512a\u60e0\u78bc\u6d3b\u52d5\u5c07\u4e0d\u53ef\u7e7c\u7e8c\u9032\u884c\u3002",
                        gd_examstack: "\u4f60\u78ba\u5b9a\u8981\u89e3\u9664\u8003\u8a66\u201c%{app_name}\u201d\u8207\u7576\u524d\u8868\u55ae\u7684\u7d81\u5b9a\u55ce\uff1f\u89e3\u7d81\u5f8c\uff0c\u539f\u5148\u88ab\u8a72\u8003\u8a66\u9396\u5b9a\u7684\u8868\u55ae\u8a2d\u7f6e\u5c07\u5141\u8a31\u4fee\u6539\uff0c\u4f46\u8a72\u8003\u8a66\u5c07\u4e0d\u53ef\u7e7c\u7e8c\u9032\u884c\u3002",
                        gd_instant_rebate: "\u4f60\u78ba\u5b9a\u8981\u89e3\u9664\u6eff\u6e1b\u6d3b\u52d5\u201c%{app_name}\u201d\u8207\u7576\u524d\u8868\u55ae\u7684\u7d81\u5b9a\u55ce\uff1f\u89e3\u7d81\u5f8c\uff0c\u539f\u5148\u88ab\u8a72\u6eff\u6e1b\u6d3b\u52d5\u9396\u5b9a\u7684\u8868\u55ae\u8a2d\u7f6e\u5c07\u5141\u8a31\u4fee\u6539\uff0c\u4f46\u8a72\u6eff\u6e1b\u6d3b\u52d5\u5c07\u4e0d\u53ef\u7e7c\u7e8c\u9032\u884c\u3002",
                        gd_printer: "\u4f60\u78ba\u5b9a\u8981\u89e3\u9664\u6a21\u677f\u201c%{app_name}\u201d\u8207\u7576\u524d\u8868\u55ae\u7684\u7d81\u5b9a\u55ce\uff1f\u89e3\u7d81\u5f8c\uff0c\u539f\u5148\u88ab\u8a72\u6a21\u677f\u9396\u5b9a\u7684\u8868\u55ae\u8a2d\u7f6e\u5c07\u5141\u8a31\u4fee\u6539\uff0c\u4f46\u8a72\u6a21\u677f\u5c07\u4e0d\u53ef\u7e7c\u7e8c\u4f7f\u7528\u3002",
                        gd_red_envelope: "\u4f60\u78ba\u5b9a\u8981\u89e3\u9664\u7d05\u5305\u201c%{app_name}\u201d\u8207\u7576\u524d\u8868\u55ae\u7684\u7d81\u5b9a\u55ce\uff1f\u89e3\u7d81\u5f8c\uff0c\u539f\u5148\u88ab\u8a72\u7d05\u5305\u9396\u5b9a\u7684\u8868\u55ae\u8a2d\u7f6e\u5c07\u5141\u8a31\u4fee\u6539\uff0c\u4f46\u8a72\u7d05\u5305\u5c07\u505c\u6b62\u767c\u653e\uff0c\u7d05\u5305\u4e2d\u672a\u767c\u653e\u5b8c\u7684\u91d1\u984d\u5c07\u9000\u56de\u5230\u5fae\u4fe1\u7d05\u5305\u61c9\u7528\u7684\u9322\u5305\u4e2d\u3002",
                        reauthorized_default_action_message: "\u53ef\u524d\u5f80\u300c%{application_name}\u300d\u61c9\u7528\u4e2d\u518d\u6b21\u4fdd\u5b58\u5373\u53ef\u3002",
                        reauthorized_gd_red_envelope_action_message: "\u53ef\u524d\u5f80\u300c%{application_name}\u300d\u61c9\u7528\u4e2d\u5275\u5efa\u65b0\u61c9\u7528\u4e26\u7d81\u5b9a\u6b64\u8868\u55ae\u5373\u53ef\u3002",
                        success_message: "\u89e3\u7d81\u6210\u529f"
                    }
                },
                apps: {
                    purchase_app: "\u8cfc\u8cb7\u61c9\u7528\u63d0\u793a",
                    warn_trail_app_failed: "\u61c9\u7528\u8a66\u7528\u5931\u6557"
                },
                attachment: {
                    accept_file_extensions: "\u50c5\u652f\u63f4\uff1a",
                    upload_image: "\u5716\u7247\u4e0a\u8f09",
                    warn_upload_failed_retry: "\uff0c\u8acb\u91cd\u9078",
                    warn_upload_oversize: "\u5df2\u8d85"
                },
                billing_account: {
                    user_invitation: {
                        email: {
                            blank: "\u90f5\u4ef6\u5730\u5740\u4e0d\u80fd\u70ba\u7a7a",
                            invalid: "\u90f5\u4ef6\u5730\u5740\u683c\u5f0f\u4e0d\u6b63\u78ba"
                        },
                        pending: "\u9080\u8bf7\u5c1a\u672a\u56de\u5e94",
                        send_emails_failed: "\u9080\u8acb\u5931\u6557",
                        send_emails_success: {
                            few: "\u5df2\u767c\u9001\u90f5\u4ef6\u9080\u8acb\u81f3%{emails}",
                            many: "\u5df2\u767c\u9001\u90f5\u4ef6\u9080\u8acb\u81f3%{emails}\u7b49%{count}\u500b\u90f5\u7bb1"
                        }
                    }
                },
                choice: {
                    hide_choice_when_quota_empty: "\u9078\u9805\u540d\u984d\u70ba\u7a7a\u6642\u96b1\u85cf\u9078\u9805",
                    hide_quota: "\u4e0d\u5411\u586b\u8868\u8005\u5c55\u793a\u9078\u9805\u540d\u984d\u5269\u9918\u6578\u5b57",
                    quota_cycle_rule: {
                        no_repeat: "\u4e0d\u91cd\u7f6e",
                        per_day: "\u6309\u5929",
                        per_week: "\u6309\u9031"
                    },
                    quota_recoverable: "\u522a\u9664\u6578\u64da\u5f8c\uff0c\u9078\u9805\u540d\u984d\u81ea\u52d5\u6062\u5fa9"
                },
                ckeditor: {
                    menus: {
                        bold: "\u52a0\u7c97",
                        gdaudio: "\u97f3\u983b",
                        gdphone: "\u96fb\u8a71",
                        gdvideo: "\u8996\u983b",
                        image: "\u5716\u7247",
                        italic: "\u50be\u659c",
                        justify_block: "\u5169\u7aef\u5c0d\u9f4a",
                        justify_center: "\u5c45\u4e2d",
                        justify_left: "\u5de6\u5c0d\u9f4a",
                        justify_right: "\u53f3\u5c0d\u9f4a",
                        link: "\u8d85\u93c8\u63a5",
                        mathjax: "\u6578\u5b78\u516c\u5f0f",
                        strike: "\u4e2d\u5283\u7dda",
                        underline: "\u4e0b\u5283\u7dda"
                    }
                },
                common: {
                    abandon: "\u4e1f\u68c4",
                    action_cancel: "\u53d6\u6d88",
                    action_confirmed: "\u78ba\u5b9a",
                    action_failed: "\u5931\u6557",
                    action_success: "\u6210\u529f",
                    active_now: "\u7acb\u5373\u958b\u555f",
                    add_data: "\u6dfb\u52a0",
                    audit_success: "\u63d0\u4ea4\u5be9\u67e5\u6210\u529f",
                    bracket: "\uff08%{content}\uff09",
                    cancel_select_all: "\u53d6\u6d88\u5168\u9078",
                    colon: "\uff1a",
                    create_new: "\u5275\u5efa",
                    date_age_format: "%{date}\uff08%{age}\u6b72\uff09",
                    default_option: "\u8acb\u9078\u64c7",
                    delete_data: "\u522a\u9664",
                    delete_failed: "\u4fdd\u5b58\u5931\u6557",
                    download_failed: "\u4e0b\u8f09\u5931\u6557",
                    edit_data: "\u7de8\u8f2f",
                    expand_html: '\u5c55\u958b<i class="gd-icon-angle-double-down"></i>',
                    female: "\u5973",
                    from_to: "\u81f3",
                    fulfill_information: "\u8acb\u5b8c\u5584\u4fe1\u606f",
                    input_placeholder: "\u8acb\u8f38\u5165",
                    item_option: "\u5c08\u6848",
                    latitude: "\u7def\u5ea6",
                    loading: "\u52a0\u8f09\u4e2d...",
                    longitude: "\u7d93\u5ea6",
                    man: "\u7537",
                    more: "\u7b49",
                    no_data: "\u7121",
                    options: "\u9078\u9805",
                    options_spec: "\u9078\u9805\u8bf4\u660e",
                    or: "\u6216",
                    others: "\u5176\u4ed6",
                    pack_up_html: '\u6536\u8d77<i class="gd-icon-angle-double-up"></i>',
                    paid_feature: "\u9ad8\u7d1a\u529f\u80fd",
                    paid_feature_ent2: "\u6b64\u529f\u80fd\u9069\u7528\u65bc\u5c08\u696d\u589e\u5f37\u7248\u53ca\u4ee5\u4e0a\u5957\u9910\u7248\u672c",
                    paid_feature_pro2: "\u6b64\u529f\u80fd\u9069\u7528\u65bc\u5c08\u696d\u7248\u53ca\u4ee5\u4e0a\u5957\u9910\u7248\u672c",
                    point: "%{point}\u5206",
                    quantity: "\u6578\u91cf",
                    recover: "\u6062\u5fa9",
                    resend: "\u91cd\u65b0\u767c\u9001",
                    save: "\u4fdd\u5b58",
                    save_failed: "\u4fdd\u5b58\u5931\u6557",
                    save_success: "\u4fdd\u5b58\u6210\u529f",
                    saving: "\u4fdd\u5b58\u4e2d...",
                    searching: "\u641c\u5c0b\u4e2d...",
                    second: "\u79d2",
                    select_all: "\u5168\u9078",
                    select_association_form: "\u8acb\u5148\u9078\u64c7\u95dc\u806f\u8868\u55ae",
                    setting_saved_failed: "\u8a2d\u7f6e\u4fdd\u5b58\u5931\u6557",
                    setting_saved_success: "\u8a2d\u7f6e\u4fdd\u5b58\u6210\u529f",
                    status_off: "\u5df2\u95dc\u9589",
                    status_on: "\u5df2\u958b\u555f",
                    text_editor_limit_text: "\u53ef\u8f38\u5165\u6587\u5b57:",
                    title_option: "\u984c\u76ee",
                    unnamed: "\u672a\u547d\u540d",
                    upgrade_package: "\u5347\u7d1a\u5957\u9910",
                    upload_failed: "\u4e0a\u4f20\u5931\u6557",
                    upload_successful: "\u4e0a\u50b3\u6210\u529f",
                    warn_choose_correct_captcha: "\u8acb\u9078\u64c7\u6b63\u78ba\u7684\u9a57\u8b49\u78bc"
                },
                contact: {
                    add_multiple: "\u91cd\u8907\u6dfb\u52a0",
                    already_select_all: "\u5df2\u9078\u64c7\u5168\u90e8",
                    already_select_filtered_result: "\u5df2\u9078\u64c7\u672c\u6b21\u7be9\u9078\u7d50\u679c\u4e2d",
                    already_select_from_page: "\u5df2\u9078\u64c7\u6b64\u9801\u9762\u4e0a",
                    clear_selected: "\u6e05\u9664\u6240\u9078\u5167\u5bb9",
                    contact_not_exist: "\u806f\u7e6b\u4eba\u4e0d\u5b58\u5728",
                    contacts: "\u4f4d\u806f\u7e6b\u4eba\u3002",
                    purchase_email_package: "\u8cfc\u8cb7\u90f5\u4ef6\u5305",
                    select_all: "\u9078\u64c7\u5168\u90e8",
                    select_filtered_result: "\u5168\u9078\u672c\u6b21\u7be9\u9078\u7d50\u679c\u4e2d",
                    selected_contact_from_filtered_result: "\u672c\u6b21\u7be9\u9078\u7d50\u679c\u4e2d%{selectedContacts}\u4f4d\u806f\u7e6b\u4eba",
                    selected_contacts: "%{selectedContacts}\u4f4d\u806f\u7e6b\u4eba",
                    send_again_after_purchase: "\uff0c\u8cfc\u8cb7\u6210\u529f\u5f8c\u518d\u6b21\u767c\u9001\u3002",
                    send_success_will_show_detail: "\u767c\u9001\u5b8c\u6210\uff0c\u5373\u5c07\u986f\u793a\u767c\u9001\u7d50\u679c\u8a73\u60c5",
                    use_semicolon_or_enter_to_separate_multiple: "\u6dfb\u52a0\u591a\u500b\u8acb\u7528\u5206\u865f\u6216\u56de\u8eca\u9694\u958b",
                    warn_email_quota_might_be_insufficient: "\u4f60\u7576\u524d\u7684\u90f5\u4ef6\u9918\u91cf\u70ba%{quota}\u5c01\uff0c\u82e5\u8981\u7e7c\u7e8c\u767c\u9001\u7d66\u6240\u9078%{selectedCount}\u4f4d\u806f\u7e6b\u4eba\uff0c\u53ef\u80fd\u6703\u9020\u6210\u8cec\u6236\u6b20\u8cbb\u7121\u6cd5\u6b63\u5e38\u4f7f\u7528\uff0c\u6211\u5011\u5efa\u8b70\u4f60\u5148",
                    warn_email_quota_not_enough: "\u4f60\u7576\u524d\u7684\u90f5\u4ef6\u9918\u91cf\u70ba%{quota}\u5c01\uff0c\u5982\u9700\u767c\u9001\u7d66\u6240\u9078%{selectedCount}\u4f4d\u806f\u7e6b\u4eba\uff0c\u8acb\u5148",
                    warn_invalid_subject_or_content_via_smtp: "\u900f\u904e\u81ea\u6709SMTP\u4f3a\u670d\u5668\u767c\u9001\u90f5\u4ef6\uff0c\u90f5\u4ef6\u4e3b\u984c\u548c\u90f5\u4ef6\u5167\u5bb9\u4e0d\u652f\u63f4\u63d2\u5165\u6578\u64da\uff0c\u8acb\u4fee\u6b63\u3002",
                    warn_label_cannot_be_empty: "\u6a19\u7c64\u540d\u7a31\u4e0d\u80fd\u70ba\u7a7a",
                    warn_label_oversize: "\u6a19\u7c64\u540d\u7a31\u4e0d\u80fd\u8d85\u904e20\u500b\u5b57"
                },
                coupon: {
                    active_coupon_code: "\u514c\u63db\u78bc\u6fc0\u6d3b\u5931\u6557\uff0c\u8acb\u7a0d\u5f8c\u518d\u8a66",
                    input_coupon_code: "\u8acb\u8f38\u5165\u512a\u60e0\u5238\u514c\u63db\u78bc",
                    no_available_coupons: "\u7121",
                    select_none: "\u672a\u9078\u64c7",
                    selected: "\uff08%{selected_coupon}\u5f35\u512a\u60e0\u5238\uff09"
                },
                dashboard: {
                    actions: {
                        favored: {
                            fail: "\u6536\u85cf\u5931\u6557",
                            successful: "\u6536\u85cf\u6210\u529f\uff0c\u8acb\u524d\u5f80\u6211\u7684\u6536\u85cf\u67e5\u770b"
                        },
                        pin: {
                            fail: "\u7f6e\u9802\u5931\u6557",
                            successful: "\u7f6e\u9802\u6210\u529f"
                        },
                        unfavored: {
                            fail: "\u53d6\u6d88\u6536\u85cf\u5931\u6557",
                            successful: "\u53d6\u6d88\u6536\u85cf\u6210\u529f"
                        },
                        unpin: {
                            fail: "\u53d6\u6d88\u7f6e\u9802\u5931\u6557",
                            successful: "\u53d6\u6d88\u7f6e\u9802\u6210\u529f"
                        }
                    },
                    add_new_label: "\u6dfb\u52a0\u6a19\u7c64",
                    cancel_pinned: "\u53d6\u6d88\u7f6e\u9802",
                    create_new_form_folder: "\u5275\u5efa\u65b0\u6587\u4ef6\u593e",
                    delete_form_folder_failed: "\u522a\u9664\u6587\u4ef6\u593e\u5931\u6557",
                    delete_form_folder_success: "\u522a\u9664\u6587\u4ef6\u593e\u6210\u529f",
                    delete_form_folder_text: "<div>\u78ba\u8a8d\u8981\u522a\u9664\u6587\u4ef6\u593e <span class='highlight'>%{folder_name}</span> \u55ce\uff1f\u6b64\u6587\u4ef6\u593e\u5305\u542b<span class='highlight'>%{folder_count}\u500b\u6587\u4ef6\u593e</span>\u548c<span class='highlight'>%{form_count}\u500b\u8868\u55ae</span>\uff0c\u4e00\u65e6\u522a\u9664\u5f8c\u9019\u4e9b\u6587\u4ef6\u593e\u548c\u8868\u55ae\u5c07\u5b58\u653e\u5728\u684c\u9762\u5662</div>",
                    delete_form_folder_text_with_folder_only: "<div>\u78ba\u8a8d\u8981\u522a\u9664\u6587\u4ef6\u593e <span class='highlight'>%{folder_name}</span> \u55ce\uff1f\u6b64\u6587\u4ef6\u593e\u5305\u542b<span class='highlight'>%{folder_count}\u500b\u6587\u4ef6\u593e</span>\uff0c\u4e00\u65e6\u522a\u9664\u5f8c\u9019\u4e9b\u6587\u4ef6\u593e\u5c07\u5b58\u653e\u5728\u684c\u9762\u5662</div>",
                    delete_form_folder_text_with_form_only: "<div>\u78ba\u8a8d\u8981\u522a\u9664\u6587\u4ef6\u593e <span class='highlight'>%{folder_name}</span> \u55ce\uff1f\u6b64\u6587\u4ef6\u593e\u5305\u542b<span class='highlight'>%{form_count}\u500b\u8868\u55ae</span>\uff0c\u4e00\u65e6\u522a\u9664\u5f8c\u9019\u4e9b\u8868\u55ae\u5c07\u5b58\u653e\u5728\u684c\u9762\u5662</div>",
                    delete_form_folder_title: "\u522a\u9664\u6587\u4ef6\u593e\u78ba\u8a8d",
                    delete_tag_success: "\u6a19\u7c64\u522a\u9664\u6210\u529f",
                    edit_form: "\u7de8\u8f2f\u8868\u55ae",
                    edit_label_success: "\u6a19\u7c64\u4fee\u6539\u6210\u529f",
                    edit_tag_success: "\u6a19\u7c64\u4fee\u6539\u6210\u529f",
                    entries_count_in_ten_thousand: "%{count}",
                    entries_with_ten_thousand: "\u842c\u6578\u64da",
                    form_copied_failed_title: "\u8868\u55ae\u8907\u5236\u5931\u6557",
                    form_copied_setting_list: "\u5df2\u5fa9\u5236\u7684\u5167\u5bb9\u5305\u62ec\uff1a",
                    form_copied_success: "\u4f60\u7684\u8868\u55ae\u5df2\u5fa9\u88fd\u6210\u529f\uff0c\u65b0\u8868\u55ae\u540d\u7a31\u5982\u4e0b\uff1a",
                    form_copied_success_title: "\u8868\u55ae\u62f7\u8c9d\u6210\u529f",
                    form_cover_style: "\u6a23\u5f0f",
                    go_to_setting: "\u524d\u5f80\u8a2d\u7f6e",
                    move_form_failed: "\u8868\u55ae\u79fb\u52d5\u5931\u6557",
                    move_form_success: "\u8868\u55ae\u79fb\u52d5\u6210\u529f",
                    move_form_to: "\u79fb\u52d5\u5230",
                    move_required_manager: "\u975e\u7ba1\u7406\u54e1\u7121\u6cd5\u79fb\u52d5\u8868\u55ae",
                    pinned: "\u7f6e\u9802",
                    reserved_entry_warning: "\u8868\u55ae\u6578\u64da\u91cf\u5df2\u8d85\u51fa\u514d\u8cbb\u7528\u91cf\uff0c\u8acb\u53ca\u6642\u5347\u7d1a\u5957\u9910\u3002",
                    reserved_entry_warning_for_cooperators: "\u8a72\u8868\u55ae\u6578\u64da\u91cf\u5df2\u8d85\u51fa\u514d\u8cbb\u7528\u91cf\uff0c\u8acb\u806f\u7e6b\u8868\u55ae\u5275\u5efa\u8005\u5347\u7d1a\u5957\u9910\u4ee5\u67e5\u770b\u5b8c\u6574\u6578\u64da",
                    select_form_template: "\u9078\u64c7\u7bc4\u672c",
                    sort: {
                        created_at: "\u6700\u65b0\u8868\u55ae\u5275\u5efa\u6642\u9593",
                        last_entry_created_at: "\u6700\u65b0\u6578\u64da\u63d0\u4ea4\u6642\u9593"
                    },
                    sort_tags_failed: "\u6a19\u7c64\u6392\u5e8f\u5931\u6557",
                    sort_tags_success: "\u6a19\u7c64\u6392\u5e8f\u6210\u529f",
                    warn_label_cannot_be_empty: "\u6a19\u7c64\u540d\u7a31\u4e0d\u80fd\u70ba\u7a7a",
                    warn_label_name_duplicate: "\u6a19\u7c64\u540d\u7a31\u4e0d\u80fd\u91cd\u8907",
                    warn_label_oversize: "\u6a19\u7c64\u540d\u7a31\u904e\u9577\uff08\u6700\u9577\u70ba6\u500b\u6f22\u5b57\u621612\u500b\u5b57\u7b26\uff09",
                    warn_label_oversize_range: "\u6700\u9577\u70ba6\u500b\u6f22\u5b57\u621612\u500b\u5b57\u7b26",
                    warn_max_label_number: "\u6a19\u7c64\u5df2\u6eff%{max_customized_tags}\u4e0a\u9650"
                },
                e_signature: {
                    board_empty: "\u7b7e\u540d\u9762\u677f\u4e3a\u7a7a",
                    upload_failed: "\u4e0a\u4f20\u7b7e\u540d\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5"
                },
                entries: {
                    add_entry: "\u8ffd\u52a0\u6578\u64da",
                    add_entry_manually: "\u624b\u52d5\u6dfb\u52a0\u6578\u64da",
                    address_city: "\u5e02",
                    address_city_option: "- \u5e02 -",
                    address_district: "\u5340\u7e23",
                    address_district_option: "- \u5340/\u7e23 -",
                    address_province: "\u7701",
                    address_province_option: "- \u7701/\u81ea\u6cbb\u5340/\u76f4\u8f44\u5e02 -",
                    append_from_excel: "Excel\u5c0e\u5165\u6578\u64da",
                    append_from_excel_title: "\u5f9eExcel\u8ffd\u52a0",
                    batch_print_limit: "\u4e00\u6b21\u6700\u591a\u652f\u630130\u689d\u6578\u64da",
                    "binding-wechat-account": "\u7d81\u5b9a\u5fae\u4fe1\u5e33\u865f",
                    bulk_download_subsheet_oversize_html: "\u77e9\u9663\u55ae\u9078\u3001\u77e9\u9663\u586b\u7a7a\u5728\u77e9\u9663\u8996\u5716\u5de5\u4f5c\u8868\u4e0b\u884c\u6578\u8d85\u904e65000\u884c\uff0c\u7121\u6cd5\u532f\u51fa\u3002 <br>\u8acb\u7be9\u9078\u90e8\u5206\u6578\u64da\uff0c\u518d\u9032\u884c\u532f\u51fa\u3002",
                    bulk_edit_failed: "\u6279\u91cf\u7de8\u8f2f\u5931\u6557",
                    bulk_edit_failed_with_blank_entry: "\u4f60\u6240\u7de8\u8f2f\u7684\u6578\u64da\u767c\u751f\u4e86\u8b8a\u5316\uff0c\u8acb\u95dc\u9589\u5f48\u7a97\u5237\u65b0\u5f8c\u91cd\u8a66\u3002",
                    bulk_edit_success: "\u6279\u91cf\u7de8\u8f2f\u6210\u529f",
                    bulk_edit_title: "\u6279\u91cf\u7de8\u8f2f",
                    bulk_print_no_selection: "\u8acb\u5148\u52fe\u9078\u8981\u6253\u5370\u7684\u6578\u64da",
                    bulk_print_reach_maxsize: "(\u6700\u591a\u652f\u63f430\u689d)",
                    bulk_print_title: "\u6279\u91cf\u5217\u5370",
                    click_here_to_restore_entry: "\u5982\u9700\u6062\u5fa9\u6578\u64da\uff0c\u8acb\u6309\u9019\u88e1\uff01",
                    click_to_download: "\u6309\u4e0b\u8f09",
                    close_wechat_notification: "\u95dc\u9589\u5fae\u4fe1\u63d0\u9192",
                    close_wechat_notification_instruction: "\u78ba\u5b9a\u8981\u95dc\u9589\u5fae\u4fe1\u63d0\u9192\u55ce\uff1f\u95dc\u9589\u5f8c\u5c07\u6703\u7121\u6cd5\u7e7c\u7e8c\u6536\u5230\u65b0\u6578\u64da\u5fae\u4fe1\u63d0\u9192",
                    color_mark: "\u6a19\u8a18\u984f\u8272",
                    color_mark_clear: "\u53d6\u6d88\u6a19\u8a18",
                    color_mark_failed: "\u6a19\u8a18\u984f\u8272\u5931\u6557",
                    enter_associated_form_entry_page: "\u9032\u5165\u95dc\u806f\u8868\u55ae\u6578\u64da\u754c\u9762",
                    enter_bulk_download_attachment_page: "\u9032\u5165\u8a72\u9644\u4ef6\u6279\u91cf\u4e0b\u8f09\u9801\u9762",
                    "export": "\u532f\u51fa",
                    export_and_print: "\u532f\u51fa&\u5217\u5370",
                    export_estimate_time: "\uff08\u7d04\u9700%{estimate_time}\u5206\u9418\uff09",
                    export_excel: "\u5c0e\u51fa\u6578\u64da",
                    export_excel_title: "\u532f\u51faExcel",
                    export_failed: "\u532f\u51fa\u5931\u6557",
                    export_rows_no_selection: "\u8acb\u5148\u52fe\u9078\u8981\u532f\u51fa\u7684\u6578\u64da",
                    export_rows_reach_maxsize: "\u52fe\u9078\u7684\u6578\u64da\u8d85\u51fa%{export_selected_rows_threshold}\u689d\uff0c\u8acb\u4f7f\u7528\u532f\u51fa\u6240\u6709\u5217\u529f\u80fd",
                    filter_by_fields: "\u6309\u6578\u64da\u5167\u5bb9\u7be9\u9078",
                    filter_by_submission_date: "\u6309\u63d0\u4ea4\u65e5\u671f\u7be9\u9078",
                    filter_data: "\u7be9\u9078\u6578\u64da",
                    form_association_been_deleted: "\u95dc\u806f\u6578\u64da\u5df2\u88ab\u522a\u9664",
                    form_association_view_full_data: "\u6aa2\u8996\u5b8c\u6574\u6578\u64da",
                    hide_columns: "\u96b1\u85cf\u5217",
                    image_loading: "\u5716\u7247\u52a0\u8f09\u4e2d...",
                    link_generating_html: "\u5730\u5740\u751f\u6210\u4e2d...<br/>\u4e26\u4e0d\u59a8\u7919\u60a8\u505a\u5176\u4ed6\u64cd\u4f5c",
                    map_loading: "\u5730\u5716\u52a0\u8f09\u4e2d\u2026\u2026",
                    mark_entry: "\u6a19\u8a18\u6578\u64da",
                    no_data: "\u66ab\u7121\u6578\u64da",
                    no_entry_selected: "\u672a\u9078\u4e2d\u6578\u64da",
                    no_recipients: "\u7121\u6536\u4ef6\u4eba",
                    note_cannot_be_empty: "\u5099\u8a3b\u5167\u5bb9\u4e0d\u80fd\u70ba\u7a7a",
                    print: "\u5217\u5370",
                    quantity_of_entries: "%{count}\u689d\u6578\u64da",
                    receivers: "%{receiver_count}\u4f4d\u6536\u4ef6\u4eba",
                    reload_entries: "\u91cd\u65b0\u52a0\u8f09\u6578\u64da",
                    results_search: "\u6578\u64da\u67e5\u8a62",
                    send_email: "\u767c\u9001\u90f5\u4ef6",
                    send_email_disabled_by_no_email_field: "\u8a72\u8868\u55ae\u4e2d\u7121\u300c\u90f5\u7bb1\u300d\u5b57\u6bb5\uff0c\u7121\u6cd5\u4f7f\u7528\u8a72\u529f\u80fd",
                    send_sms: "\u767c\u9001\u7c21\u8a0a",
                    send_sms_and_email: "\u767c\u9001\u7c21\u8a0a&\u90f5\u4ef6",
                    send_sms_and_email_disabled_by_no_related_field: "\u8868\u55ae\u4e2d\u7121\u300c\u624b\u6a5f\u300d\u53ca\u300c\u90f5\u7bb1\u300d\u5b57\u6bb5\uff0c\u7121\u6cd5\u4f7f\u7528\u8a72\u529f\u80fd",
                    send_sms_and_email_disabled_by_no_selection: "\u8acb\u5148\u52fe\u9078\u8981\u767c\u9001\u7684\u6578\u64da",
                    send_sms_disabled_by_all_intl_mobile_no: "\u570b\u969b\u624b\u6a5f\u865f\u4e0d\u652f\u6301\u767c\u9001\u77ed\u4fe1\u529f\u80fd",
                    send_sms_disabled_by_no_sms_field: "\u8a72\u8868\u55ae\u4e2d\u7121\u300c\u624b\u6a5f\u300d\u5b57\u6bb5\uff0c\u7121\u6cd5\u4f7f\u7528\u8a72\u529f\u80fd",
                    share_entries: "\u6578\u64da\u5206\u4eab",
                    share_results: "\u7d50\u679c\u5206\u4eab",
                    show_or_hide_fields: "\u986f\u793a\u6216\u96b1\u85cf\u5404\u5217\u6578\u64da",
                    transaction_trends: "\u4ea4\u6613\u91cf",
                    transaction_trends_ordered_stats: "\u4e0b\u55ae\u91cf",
                    transaction_trends_paid_stats: "\u6210\u4ea4\u91cf",
                    unmark_entry: "\u53d6\u6d88\u6a19\u8a18",
                    view_audit_trail_item: "\u6aa2\u8996\u6578\u64da\u8b8a\u66f4\u8a18\u9304",
                    view_history: "\u6aa2\u8996\u4efb\u52d9\u8a18\u9304",
                    warn_delete_failed_in_progress: "\u522a\u9664\u5931\u6557\uff0c\u53ef\u80fd\u9084\u6709\u5176\u5b83\u7684\u6578\u64da\u6b63\u5728\u522a\u9664\u4e2d\uff0c\u8acb\u7a0d\u5f8c\u518d\u8a66",
                    warn_delete_failed_refresh_and_retry: "\u522a\u9664\u5931\u6557\uff01\u8acb\u5237\u65b0\u9801\u9762\u5f8c\u91cd\u8a66",
                    warn_selected_excel_need_required__field_label: "\u6b64\u8868\u55ae\u542b\u6709\u4e0d\u652f\u63f4Excel\u4e0a\u8f09\u7684\u5fc5\u586b\u5b57\u6bb5\uff0c\u66ab\u4e0d\u652f\u63f4\u5f9eExcel\u8ffd\u52a0\u6578\u64da",
                    warn_selected_excel_need_required_field: "\u6b64\u8868\u5355\u542b\u6709\u4e0d\u652f\u63f4Excel\u4e0a\u4f20\u7684\u5fc5\u586b\u5b57\u6bb5\uff0c\u6682\u4e0d\u652f\u63f4\u4eceExcel\u8ffd\u52a0\u6570\u636e",
                    wechat_notification_close_fail: "\u65b0\u6578\u64da\u5fae\u4fe1\u63d0\u9192\u95dc\u9589\u5931\u6557",
                    wechat_notification_closed_tooltip: "\u958b\u555f\u5f8c\uff0c\u53ef\u5728\u5fae\u4fe1\u4e2d\u63a5\u6536\u6578\u64da\u63d0\u9192\u3002",
                    wechat_notification_open_fail: "\u65b0\u6578\u64da\u5fae\u4fe1\u63d0\u9192\u6253\u958b\u5931\u6557",
                    wechat_notification_open_success: "\u65b0\u6578\u64da\u5fae\u4fe1\u63d0\u9192\u6253\u958b\u6210\u529f",
                    wechat_notification_opened_tooltip: "\u81ea\u5df1\u586b\u5beb\u7684\u8868\u55ae\u6578\u64da\uff0c\u7cfb\u7d71\u4e0d\u6703\u63a8\u9001\u63d0\u9192\u3002\u8acb\u9000\u51fa\u5e33\u865f\u5f8c\u518d\u586b\u5beb\u6578\u64da\uff0c\u9032\u884c\u6e2c\u8a66\u3002",
                    wechat_notification_title: "\u65b0\u6578\u64da\u5fae\u4fe1\u63d0\u9192"
                },
                feature_trial: {
                    fail_to_end_trial: "\u7d50\u675f\u4f01\u696d\u8a66\u7528\u5931\u6557",
                    fail_to_start_trial: "\u958b\u555f\u4f01\u696d\u8a66\u7528\u5931\u6557",
                    success_to_end_trial: "\u7d50\u675f\u4f01\u696d\u8a66\u7528\u6210\u529f"
                },
                field: {
                    acl_black: "\u958b\u555f\u9ed1\u540d\u55ae",
                    acl_black_white_list_text: "\u767d\u540d\u55ae",
                    acl_count_text: "\uff08\u5df2\u8a2d%{acl_count}\u500b\uff09",
                    acl_modify: "\u4fee\u6539",
                    acl_white: "\u958b\u555f\u767d\u540d\u55ae",
                    add_option: "\u6dfb\u52a0\u9805",
                    address_field_label: "\u5730\u5740",
                    at_least: "\u6700\u5c11",
                    at_most: "\u6700\u591a",
                    attachment_field_label: "\u9644\u4ef6",
                    attachment_size_error: "\u8f38\u5165\u932f\u8aa4",
                    calculable_field_insertion: {
                        avg: "AVG\uff08\u5e73\u5747\u503c\uff09",
                        max: "MAX\uff08\u6700\u5927\u503c\uff09",
                        min: "MIN\uff08\u6700\u5c0f\u503c\uff09",
                        sum: "SUM\uff08\u6c42\u548c\uff09"
                    },
                    cascade_choice: {
                        level: {
                            1: {
                                default_value: "\u4e00\u7d1a\u9078\u9805",
                                title: "\u4e00\u7d1a\u4e0b\u62c9"
                            },
                            2: {
                                default_value: "\u4e8c\u7d1a\u9078\u9805",
                                title: "\u4e8c\u7d1a\u4e0b\u62c9"
                            },
                            3: {
                                default_value: "\u4e09\u7d1a\u9078\u9805",
                                title: "\u4e09\u7d1a\u4e0b\u62c9"
                            },
                            4: {
                                default_value: "\u56db\u7d1a\u9078\u9805",
                                title: "\u56db\u7d1a\u4e0b\u62c9"
                            }
                        },
                        max_choices: "\u6bcf\u7d1a\u4e0b\u62c9\u6846\u4e2d\u6700\u591a\u652f\u6301%{count}\u500b\u9078\u9805"
                    },
                    choice_already_empty: "\u5df2\u7a7a",
                    choice_left_quota: "\u9918%{quota}",
                    choice_operand_value_is: "\u503c%{operandValue}",
                    choice_prefix: "\u9078",
                    choice_suffix: "\u9805",
                    choose_trigger_condition: "\u8acb\u9078\u64c7\u89f8\u767c\u689d\u4ef6",
                    choose_trigger_target_field: "\u8acb\u9078\u64c7\u89f8\u767c\u5b57\u6bb5",
                    choose_triggered_field: "\u8acb\u9078\u64c7\u88ab\u89f8\u767c\u7684\u5b57\u6bb5",
                    date_field_label: "\u65e5\u671f",
                    date_range_hint_between: "\u8acb\u9078\u64c7%{start_date}\u5230%{end_date}\u4e4b\u9593\u7684\u65e5\u671f",
                    date_range_hint_bigger_than: "\u8acb\u9078\u64c7%{start_date}\u53ca\u4e4b\u5f8c\u7684\u65e5\u671f",
                    date_range_hint_smaller_then: "\u8acb\u9078\u64c7%{end_date}\u53ca\u4e4b\u524d\u7684\u65e5\u671f",
                    e_signature_field_label: "\u7b7e\u540d",
                    email_field_label: "\u90f5\u7bb1",
                    form_association: {
                        choose_associated_display_field: "\u8acb\u9078\u64c7",
                        choose_associated_field_before_change_prompt: "\u56e0\u6709\u672a\u8a2d\u7f6e\u7684\u95dc\u806f\u5b57\u6bb5\u6545\u4e0d\u652f\u6301\u66f4\u6539\u9ed8\u8a8d\u6587\u6848"
                    },
                    formula_contains_invalid_variables: "\u516c\u5f0f\u5305\u542b\u4e0d\u5b58\u5728\u6216\u8005\u4e0d\u53ef\u8a08\u7b97\u7684\u5b57\u6bb5\u8b8a\u91cf",
                    formula_contains_unsupported_operators: "\u516c\u5f0f\u5305\u542b\u6709\u4e0d\u652f\u6301\u7684\u8a08\u7b97\u7b26\u6216\u8005\u8b8a\u91cf",
                    formula_disabled: "\u7576\u524d\u8868\u55ae\u6c92\u6709\u53ef\u4ee5\u53c3\u8207\u8a08\u7b97\u7684\u5b57\u6bb5",
                    formula_invalid: "\u8a08\u7b97\u516c\u5f0f\u4e0d\u5408\u6cd5\uff1a\u5305\u542b\u4e0d\u5b58\u5728\u6216\u8005\u4e0d\u53ef\u8a08\u7b97\u7684\u5b57\u6bb5\u8b8a\u91cf",
                    formula_not_empty: "\u516c\u5f0f\u4e0d\u80fd\u70ba\u7a7a",
                    formula_parse_failed: "\u516c\u5f0f\u4e0d\u6b63\u78ba\uff0c\u89e3\u6790\u5931\u6557",
                    geo_field_label: "\u5730\u7406\u4f4d\u7f6e",
                    good_item_one: "\u5546\u54c1\u4e00",
                    good_item_three: "\u5546\u54c1\u4e09",
                    good_item_two: "\u5546\u54c1\u4e8c",
                    goods_disable_fixed_number_html: '<dl class="dl-horizontal"> <dt><i class="gd-icon-info-circle"></i></dt> <dd>\u8a2d\u7f6e\u591a\u898f\u683c\u6642\uff0c\u300c\u9ed8\u8a8d\u6578\u91cf\u300d\u548c\u300c\u4e0d\u53ef\u4fee\u6539\u6578\u91cf\u300d\u4e0d\u53ef\u7528\uff0c\u5982\u9700\u8a2d\u7f6e\u8acb\u5c07\u591a\u898f\u683c\u62c6\u5206\u6210\u591a\u500b\u5546\u54c1\u3002</dd> </dl>',
                    goods_item_add_new: "\u8acb\u5728\u53f3\u5074\u9762\u677f\u6dfb\u52a0\u5546\u54c1",
                    goods_item_clear_dimensions: "\u6e05\u9664\u898f\u683c\u548c\u6578\u91cf",
                    goods_item_click_to_add_image: "\u9ede\u6b64\u6dfb\u52a0\u5546\u54c1\u5716\u7247",
                    goods_item_default: "\u9810\u8a2d",
                    goods_item_inventory_label: "\u5eab\u5b58",
                    goods_item_label: "\u5546\u54c1\u540d",
                    goods_item_name: "\u5546\u54c1",
                    goods_item_total: "\u5171",
                    goods_item_unit: "\u4ef6",
                    goods_item_update_dimensions: "\u4fee\u6539\u8a73\u7d30\u898f\u683c\u548c\u6578\u91cf",
                    goods_max_purchase_quantity: "\u6700\u591a\u8cfc\u8cb7",
                    goods_min_purchase_quantity: "\u6700\u5c11\u8cfc\u8cb7",
                    hidden_indicator: "\u6b64\u9078\u9805\u5df2\u88ab\u96b1\u85cf",
                    hide_choice_when_quota_empty: "\u5df2\u958b\u555f\u9078\u9805\u540d\u984d\u70ba\u7a7a\u6642\u96b1\u85cf\u9078\u9805",
                    image_choice: {
                        add_image_label: "\u8acb\u5728\u53f3\u5074\u9762\u677f\u6dfb\u52a0\u5716\u7247",
                        click_to_upload_image: "\u9ede\u6b64\u6dfb\u52a0\u5716\u7247\u9078\u9805",
                        warn_name_cannot_be_empty: "\u5716\u7247\u540d\u7a31\u9078\u9805\u4e0d\u80fd\u70ba\u7a7a",
                        warn_quota_temp_empty_or_positive_number: "\u540d\u984d\u5fc5\u9808\u70ba\u975e\u8ca0\u6578\u5b57\u6216\u70ba\u7a7a",
                        warn_reach_text_max_length: "\u5b57\u6578\u4e0d\u80fd\u5927\u65bc%{text_max_length}"
                    },
                    image_choice_field_label: "\u5716\u7247",
                    intl_mobile_no_unsupport_sms_text: "\u6536\u96c6\u5230\u7684\u570b\u969b\u865f\u78bc\u66ab\u4e0d\u652f\u6301\u767c\u9001\u77ed\u4fe1",
                    intl_mobile_no_unsupport_verify_text: "\u66ab\u4e0d\u652f\u6301\u570b\u969b\u865f\u78bc\u9a57\u8b49\uff0c\u570b\u5167\u865f\u78bc\u9a57\u8b49\u4e0d\u53d7\u5f71\u97ff",
                    intl_mobile_no_white_list_unsupport_text: "\u6536\u96c6\u570b\u969b\u624b\u6a5f\u865f\u6642\uff0c\u8a72\u529f\u80fd\u4e0d\u53ef\u7528",
                    invalid_redirect_url: "\u7db2\u5740\u683c\u5f0f\u4e0d\u5c0d",
                    link_field_example: "\u586b\u5beb\u793a\u4f8b\uff1ahttp://jinshuju.net \u6216 https://jinshuju.net",
                    link_field_label: "\u7db2\u5740",
                    mobile_field_label: "\u624b\u6a5f",
                    name_field_label: "\u59d3\u540d",
                    no_targets_field_available: "\u6c92\u6709\u53ef\u4f9b\u63a7\u5236\u7684\u5b57\u6bb5\uff0c\u56e0\u70ba\u201c%{field_name}\u201d\u662f\u8a72\u8868\u55ae\u6700\u5f8c\u4e00\u500b\u5b57\u6bb5",
                    nps_field_label: "\u59b3\u6709\u591a\u5927\u53ef\u80fd\u628a\u6211\u5011\u63a8\u85a6\u7d66\u670b\u53cb\u6216\u540c\u4e8b\uff1f\u8acb\u5f9e0\u5206\u523010\u5206\u6253\u5206\u3002",
                    option_spec_assocation_view_disabled: {
                        choices_layout: "\u7531\u65bc\u8a72\u5b57\u6bb5\u8a2d\u7f6e\u4e86\u9078\u9805\u8aaa\u660e\uff0c\u300c\u6a6b\u5411\u300d\u6392\u5217\u65b9\u5f0f\u4e0d\u53ef\u7528",
                        grids_to_occupy: "\u7531\u65bc\u8a72\u5b57\u6bb5\u8a2d\u7f6e\u4e86\u9078\u9805\u8aaa\u660e\uff0c\u300c\u5bec\u5ea6\u5360\u7528\u6574\u884c\u300d\u7684\u6bd4\u4f8b\u4e0d\u80fd\u5c0f\u65bc1",
                        presentation_style: "\u7531\u65bc\u8a72\u5b57\u6bb5\u8a2d\u7f6e\u4e86\u9078\u9805\u8aaa\u660e\uff0c\u300c\u4e0b\u62c9\u6846\u300d\u5c55\u793a\u6a23\u5f0f\u4e0d\u53ef\u7528"
                    },
                    option_spec_disabled: {
                        choices_layout: "\u7531\u65bc\u8a72\u5b57\u6bb5\u8a2d\u7f6e\u4e86\u300c\u6a6b\u5411\u300d\u6392\u5217\u65b9\u5f0f\uff0c\u9078\u9805\u8aaa\u660e\u4e0d\u53ef\u7528",
                        choices_layout_and_presentation_style: "\u7531\u65bc\u8a72\u5b57\u6bb5\u5c55\u793a\u6a23\u5f0f\u70ba\u300c\u4e0b\u62c9\u6846\u300d\uff0c\u9078\u9805\u8aaa\u660e\u4e0d\u53ef\u7528",
                        grids_to_occupy: "\u7531\u65bc\u8a72\u5b57\u6bb5\u300c\u5bec\u5ea6\u5360\u7528\u6574\u884c\u300d\u7684\u6bd4\u4f8b<1\uff0c\u9078\u9805\u8aaa\u660e\u4e0d\u53ef\u7528",
                        grids_to_occupy_and_choices_layout: "\u7531\u65bc\u8a72\u5b57\u6bb5\u8a2d\u7f6e\u4e86\u300c\u6a6b\u5411\u300d\u6392\u5217\u65b9\u5f0f\u548c\u300c\u5bec\u5ea6\u5360\u7528\u6574\u884c\u300d\u6bd4\u4f8b<1\uff0c\u9078\u9805\u8aaa\u660e\u4e0d\u53ef\u7528",
                        grids_to_occupy_and_choices_layout_and_presentation_style: "\u7531\u65bc\u8a72\u5b57\u6bb5\u8a2d\u7f6e\u4e86\u300c\u6a6b\u5411\u300d\u6392\u5217\u65b9\u5f0f\u548c\u300c\u5bec\u5ea6\u5360\u7528\u6574\u884c\u300d\u6bd4\u4f8b<1\uff0c\u9078\u9805\u8aaa\u660e\u4e0d\u53ef\u7528",
                        grids_to_occupy_and_presentation_style: "\u7531\u65bc\u8a72\u5b57\u6bb5\u5c55\u793a\u6a23\u5f0f\u70ba\u300c\u4e0b\u62c9\u6846\u300d\u6392\u5217\u65b9\u5f0f\u548c\u300c\u5bec\u5ea6\u5360\u7528\u6574\u884c\u300d\u6bd4\u4f8b<1\uff0c\u9078\u9805\u8aaa\u660e\u4e0d\u53ef\u7528",
                        presentation_style: "\u7531\u65bc\u8a72\u5b57\u6bb5\u5c55\u793a\u6a23\u5f0f\u70ba\u300c\u4e0b\u62c9\u6846\u300d\uff0c\u9078\u9805\u8aaa\u660e\u4e0d\u53ef\u7528"
                    },
                    option_spec_text_max_text_error: "\u4e0d\u80fd\u8d85\u904e%{maxCount}\u500b\u5b57",
                    optional: "\u9078\u586b",
                    others_prefix: "\u8acb\u586b\u5beb",
                    others_suffix: "\u500b\u5b57",
                    range_hint_between: "\u8acb\u8f38\u5165%{from_number}-%{to_number}\u4e4b\u9593\u7684\u6578\u5b57",
                    range_hint_bigger_than: "\u8acb\u8f38\u5165%{range_number}\u53ca\u4ee5\u4e0a\u7684\u6578\u5b57",
                    range_hint_decimal_place_allowed: "\u50c5\u652f\u6301%{precision}\u4f4d\u5c0f\u6578\uff0c\u5982\uff1a%{example}",
                    range_hint_smaller_then: "\u8acb\u8f38\u5165\u4e0d\u5927\u65bc%{range_number}\u7684\u6578\u5b57",
                    rating_field_label: "\u8a55\u5206",
                    rule_hide: "\u96b1\u85cf\uff1a",
                    rule_saved_failed: "\u8acb\u5347\u7d1a\u5f8c\u518d\u4f7f\u7528\uff01",
                    rule_saved_failed_invalid_format: "\u898f\u5247\u4fdd\u5b58\u5931\u6557\uff01",
                    rule_saved_success: "\u898f\u5247\u4fdd\u5b58\u6210\u529f\uff01",
                    rule_show: "\u986f\u793a\uff1a",
                    section_break_label: "\u63cf\u8ff0",
                    section_break_notes: "\u8acb\u5728\u53f3\u5074\u9762\u677f\u6dfb\u52a0\u6bb5\u843d\u8aaa\u660e\u4fe1\u606f",
                    send_mobile_token: "\u767c\u9001\u9a57\u8b49\u7c21\u8a0a",
                    set_redirect_url: "\u8acb\u8a2d\u7f6e\u8df3\u8f49\u7684\u7db2\u5740",
                    shared: {
                        maximum_ratings_display_text: "\u6975\u6709\u53ef\u80fd",
                        minimum_ratings_display_text: "\u4e0d\u53ef\u80fd"
                    },
                    sku: {
                        default_empty_or_positive_number: "\u5fc5\u9808\u70ba\u975e\u8ca0\u6574\u6578\u6216\u7a7a",
                        warn_default_quantity_max_validation: "\u9650\u8cfc%{limit}\u4ef6",
                        warn_default_quantity_min_validation: "\u8d77\u8cfc%{limit}\u4ef6",
                        warn_quantity_default_validation: "\u8acb\u6aa2\u67e5\u6578\u64da\u7bc4\u570d",
                        warn_quantity_limit_label: "\u8d77\u8cfc%{min_limit}\u4ef6\uff0c\u9650\u8cfc%{max_limit}\u4ef6",
                        warn_quantity_max_validation: "\u8acb\u8f38\u5165\u5c0f\u65bc\u7b49\u65bc%{limit}\u7684\u6578\u91cf",
                        warn_quantity_min_validation: "\u8acb\u8f38\u5165\u5927\u65bc\u7b49\u65bc%{limit}\u7684\u6578\u91cf"
                    },
                    sort_field_note: "\u8acb\u6309\u7167\u512a\u5148\u6b21\u5e8f\uff0c\u4f9d\u6b21\u9ede\u64ca\u9078\u9805\u9032\u884c\u6392\u5e8f",
                    telephone_field_label: "\u96fb\u8a71",
                    time_field_label: "\u6642\u9593",
                    verification_token: "\u9a57\u8b49\u78bc",
                    warn_add_or_choose_one_field: "\u8acb\u6dfb\u52a0\u6216\u8005\u9078\u64c7\u4e00\u500b\u5b57\u6bb5",
                    warn_address_at_least_choose_one: "\u8acb\u81f3\u5c11\u9078\u64c7\u5c55\u793a\u4e00\u500b\u5730\u5740\u9078\u64c7\u9805",
                    warn_address_set_city_required: "\u52fe\u9078\u5340/\u7e23\u4e4b\u524d\u8acb\u5148\u52fe\u9078\u5e02",
                    warn_address_set_province_required: "\u8acb\u5148\u8a2d\u5b9a\u7701",
                    warn_at_least_one_level_one_choice: "\u81f3\u5c11\u9700\u8981\u4e00\u4e2a\u663e\u793a\u7684\u4e00\u7ea7\u9009\u9879",
                    warn_at_least_one_sub_choice: "\u9009\u9879\u300c%{choice}\u300d\u81f3\u5c11\u9700\u8981\u4e00\u4e2a\u663e\u793a\u7684\u4e0b\u7ea7\u9009\u9879",
                    warn_choice_cannot_be_empty: "\u9078\u9805\u4e0d\u80fd\u70ba\u7a7a",
                    warn_choice_max_length: "\u5b57\u6578\u4e0d\u80fd\u5927\u65bc%{max_length}",
                    warn_choice_operand_value_temp_validation: "\u904b\u7b97\u503c\u5fc5\u9808\u70ba\u6578\u5b57",
                    warn_choice_quota_temp_validation: "\u8acb\u8f38\u5165\u975e\u8ca0\u6574\u6578",
                    warn_choice_unnamed_operand_value_unavailable: "\u9078\u9805\u672a\u547d\u540d\u7121\u6cd5\u8ce6\u503c",
                    warn_common_cannot_be_empty: "\u4e0d\u80fd\u70ba\u7a7a",
                    warn_common_reach_max: "\u6700\u591a%{max_character_length}\u500b\u5b57",
                    warn_customized_validation_reach_max: "\u81ea\u8a02\u51fa\u932f\u6587\u6848\u4e0d\u53ef\u8d85\u904e50\u500b\u5b57\u7b26",
                    warn_default_bigger_than: "\u9810\u8a2d\u503c\u61c9\u7576\u4e0d\u5c0f\u65bc%{options_min}",
                    warn_default_smaller_than: "\u9810\u8a2d\u503c\u61c9\u7576\u4e0d\u5927\u65bc%{options_max}",
                    warn_dimension_label_cannot_be_empty: "\u9805\u76ee\u540d\u7a31\u4e0d\u80fd\u70ba\u7a7a",
                    warn_dimension_label_too_long: "\u9805\u76ee\u540d\u7a31\u4e0d\u53ef\u8d85\u904e50\u500b\u5b57\u7b26",
                    warn_for_cooperators_only: "\u50c5\u9650\u7ba1\u7406\u54e1\u53ef\u898b",
                    warn_forteen_digits_at_most: "\u5c0f\u6578\u4f4d\u6700\u591a14",
                    warn_good_demension_cannot_be_empty: "\u50f9\u683c\u5fc5\u9808\u70ba\u975e\u7a7a\u6578\u5b57",
                    warn_good_demension_empty_or_positive_number: "\u5eab\u5b58\u5fc5\u9808\u70ba\u975e\u8ca0\u6578\u5b57\u6216\u70ba\u7a7a",
                    warn_goods_item_inventory_exceed_max: "\u5eab\u5b58\u4e0d\u80fd\u8d85\u904e5\u4f4d\u6578\u5b57",
                    warn_goods_item_inventory_validation: "\u5eab\u5b58\u5fc5\u9808\u70ba\u975e\u8ca0\u6578\u5b57\u6216\u70ba\u7a7a",
                    warn_goods_item_name_cannot_be_empty: "\u5546\u54c1\u540d\u4e0d\u80fd\u70ba\u7a7a",
                    warn_goods_item_predefined_number_validation: "\u9810\u8a2d\u6578\u91cf\u5fc5\u9808\u70ba\u975e\u8ca0\u6578\u5b57\u6216\u70ba\u7a7a",
                    warn_goods_item_price_validation: "\u50f9\u683c\u5fc5\u9808\u70ba\u975e\u7a7a\u6578\u5b57",
                    warn_integer_required: "\u8acb\u8f38\u5165\u6b63\u6574\u6578",
                    warn_item_cannot_be_empty: "\u5c08\u6848\u4e0d\u80fd\u70ba\u7a7a",
                    warn_less_cascade_dropdown_levels: "\u9078\u9805\u7d1a\u6578\u4e0d\u80fd\u5c11\u65bc\u8a2d\u7f6e\u7684\u7d1a\u6578",
                    warn_load_associable_data_failed: "\u7372\u53d6\u95dc\u806f\u6578\u64da\u5931\u6557",
                    warn_media_type_cannot_be_empty: "\u81ea\u5b9a\u6587\u4ef6\u683c\u5f0f\u4e0d\u80fd\u70ba\u7a7a",
                    warn_media_type_support_list: "\u6587\u4ef6\u683c\u5f0f\u4e0d\u5408\u6cd5\uff0c\u50c5\u652f\u63f4\uff1a\u5b57\u6bcd\uff0c\u6578\u5b57\uff0c\u4e0b\u5283\u7dda\uff0c\u4e2d\u5283\u7dda\u3002",
                    warn_more_cascade_dropdown_levels: "\u9078\u9805\u7d1a\u6578\u4e0d\u80fd\u5927\u65bc\u8a2d\u7f6e\u7684\u7d1a\u6578",
                    warn_no_field_selected: "\u6c92\u6709\u9078\u5b9a\u7684\u5b57\u6bb5",
                    warn_number_required_as_default: "\u9810\u8a2d\u503c\u61c9\u8a72\u662f\u4e00\u500b\u6578\u5b57",
                    warn_section_break_cannot_be_empty: "\u6a19\u984c\u4e0d\u80fd\u70ba\u7a7a",
                    warn_sms_signature_length: "\u5fc5\u9808\u70ba2-8\u500b\u6f22\u5b57",
                    warn_sms_signature_required: "\u8acb\u586b\u5beb\u7c3d\u540d",
                    warn_title_cannot_be_empty: "\u984c\u76ee\u4e0d\u80fd\u70ba\u7a7a",
                    white_list_count_text: "\uff08\u5df2\u8bbe%{white_list_count}\u4e2a\uff09",
                    white_list_reset: "\u4fee\u6539"
                },
                form: {
                    add_or_filter_condition: "\u6dfb\u52a0\u201c\u6216\u201d\u95dc\u4fc2\u689d\u4ef6",
                    check_client_recovery_conflict: {
                        confirm: "\u6211\u77e5\u9053\u4e86",
                        description: "\u6b64\u8868\u55ae\u5df2\u52fe\u9078\u586b\u5beb\u6642\u81ea\u52d5\u4fdd\u5b58\uff0c\u5982\u679c\u60a8\u4fee\u6539\u4e86\u8868\u55ae\u5b57\u6bb5\uff0c\u586b\u8868\u8005\u5df2\u4fdd\u5b58\u7684\u5167\u5bb9\u5c07\u5931\u6548\uff0c\u9700\u91cd\u65b0\u586b\u5beb\u3002\u8acb\u614e\u91cd\u7de8\u8f2f\u8868\u55ae\u5167\u5bb9\u3002",
                        title: "\u8868\u55ae\u5df2\u958b\u555f\u81ea\u52d5\u4fdd\u5b58"
                    },
                    check_unexpected_form_content: "\u7cfb\u7d71\u76e3\u6e2c\u5230\u4f60\u6709\u672a\u4fdd\u5b58\u8868\u55ae\uff0c\u662f\u5426\u6062\u5fa9\u7de8\u8f2f\uff1f",
                    check_unexpected_form_title: "\u8868\u55ae\u81ea\u52d5\u6062\u5fa9",
                    city_donot_support_map_report: "\u5e02(\u4e0d\u652f\u63f4\u5730\u5716\u985e\u578b)",
                    client_cache_notification: "\u586b\u5beb\u5167\u5bb9\u5df2\u81ea\u52d5\u4fdd\u5b58",
                    confirm_leave_share: "\u60a8\u78ba\u5b9a\u8981\u89e3\u9664\u5c0d\u8a72\u8868\u55ae\u7684\u6240\u6709\u6b0a\u9650\u55ce\uff1f",
                    cooperators: {
                        add: "\u78ba\u8a8d\u6dfb\u52a0",
                        external: "\u5916\u90e8\u806f\u7e6b\u4eba",
                        go_assign_ability: "\u4e0b\u4e00\u6b65",
                        internal: "\u5b50\u8cec\u865f",
                        shared: "\u5df2\u5171\u4eab"
                    },
                    date_example: "(\u5982\uff1a2012-12-30)",
                    delete_rule_failed: "\u522a\u9664\u5931\u6557",
                    delete_rule_success: "\u77ed\u4fe1\u522a\u9664\u6210\u529f",
                    describe_form: "\u63cf\u8ff0\u4f60\u7684\u8868\u55ae",
                    field_count_forewarning_html: "\u7576\u524d\u8868\u55ae\u5df2\u6dfb\u52a0\u4e86<span class='highlight'>%{field_count}</span>\u500b\u5b57\u6bb5\uff0c<br /> \u96e2\u4e0a\u9650\u9084\u5269<span class='highlight'>%{remaining_count}</span>\u500b\uff0c\u8acb\u6ce8\u610f\uff01",
                    fill_form: "\u586b\u5beb",
                    fill_form_able_to: "\u53ef\u4ee5",
                    fill_form_everyday_in: "\u6bcf\u5929\u5728",
                    fill_form_in: "\u5728",
                    fill_frequency: {
                        condition: {
                            by_device: "\u6bcf\u53f0\u96fb\u8166/\u624b\u6a5f\u586b\u5beb\u4e00\u6b21",
                            by_ip: "\u6bcf\u500bIP\u586b\u5beb\u4e00\u6b21"
                        },
                        fill_type: {
                            once: "\u9650\u586b\u4e00\u6b21",
                            repeatable_by_day: "\u6bcf\u5929\u9650\u586b\u4e00\u6b21",
                            unlimited: "\u53ef\u4ee5\u586b\u5beb"
                        }
                    },
                    form_setting: {
                        fill_rule_condition_warning: "\u6b64\u529f\u80fd\u50c5\u5728\u958b\u5553\u6536\u96c6\u5fae\u4fe1\u4fe1\u606f\u6642\u53ef\u7528\uff0c\u8acb\u5148\u9078\u64c7\u6536\u96c6\u7528\u6236\u5fae\u4fe1\u4fe1\u606f\u7684\u65b9\u5f0f",
                        submission_authority: {
                            "private": "\u50c5\u7ba1\u7406\u54e1\u53ef\u586b",
                            summary: {
                                gd_user_only: {
                                    once: {
                                        by_device: {
                                            text: "\u91d1\u6578\u64da\u7528\u6236\u53ef\u4ee5\u5728\u6bcf\u53f0\u96fb\u8166/\u624b\u6a5f\u586b\u5beb\u4e00\u6b21\u3002"
                                        },
                                        by_ip: {
                                            text: "\u91d1\u6578\u64da\u7528\u6236\u53ef\u4ee5\u5728\u6bcf\u500bIP\u586b\u5beb\u4e00\u6b21\u3002"
                                        },
                                        by_weixin: {
                                            text: "\u91d1\u6578\u64da\u7528\u6236\u53ef\u4ee5\u5728\u6bcf\u5fae\u4fe1OpenID\u586b\u5beb\u4e00\u6b21\u3002"
                                        },
                                        text: "\u91d1\u6578\u64da\u7528\u6236\u9650\u586b\u4e00\u6b21\u3002"
                                    },
                                    repeatable: {
                                        text: "\u91d1\u6578\u64da\u7528\u6236\u53ef\u4ee5%{cycle_period}%{limited_time}\u3002"
                                    },
                                    repeatable_by_day: {
                                        text: "\u91d1\u6578\u64da\u7528\u6236\u6bcf\u5929\u9650\u586b\u4e00\u6b21\u3002"
                                    },
                                    unlimited: {
                                        text: "\u91d1\u6578\u64da\u7528\u6236\u53ef\u4ee5\u586b\u5beb\u3002"
                                    }
                                },
                                internal: {
                                    once: {
                                        by_device: {
                                            text: "\u5b50\u8cec\u865f\u53ef\u4ee5\u5728\u6bcf\u53f0\u96fb\u8166/\u624b\u6a5f\u586b\u5beb\u4e00\u6b21\u3002"
                                        },
                                        by_ip: {
                                            text: "\u5b50\u8cec\u865f\u53ef\u4ee5\u5728\u6bcf\u500bIP\u586b\u5beb\u4e00\u6b21\u3002"
                                        },
                                        by_weixin: {
                                            text: "\u5b50\u8cec\u865f\u53ef\u4ee5\u5728\u6bcf\u5fae\u4fe1OpenID\u586b\u5beb\u4e00\u6b21\u3002"
                                        }
                                    },
                                    repeatable: {
                                        text: "\u5b50\u8cec\u865f\u53ef\u4ee5%{cycle_period}%{limited_time}\u3002"
                                    },
                                    unlimited: {
                                        text: "\u5b50\u8cec\u865f\u53ef\u4ee5\u586b\u5beb\u3002"
                                    }
                                },
                                "private": {
                                    text: "\u50c5\u7ba1\u7406\u54e1\u53ef\u586b"
                                },
                                "public": {
                                    once: {
                                        by_device: {
                                            text: "\u6240\u6709\u4eba\u53ef\u4ee5\u5728\u6bcf\u53f0\u96fb\u8166/\u624b\u6a5f\u586b\u5beb\u4e00\u6b21\u3002"
                                        },
                                        by_ip: {
                                            text: "\u6240\u6709\u4eba\u53ef\u4ee5\u5728\u6bcf\u500bIP\u586b\u5beb\u4e00\u6b21\u3002"
                                        },
                                        by_weixin: {
                                            text: "\u6240\u6709\u4eba\u53ef\u4ee5\u5728\u6bcf\u5fae\u4fe1OpenID\u586b\u5beb\u4e00\u6b21\u3002"
                                        }
                                    },
                                    repeatable: {
                                        by_device: {
                                            text: "\u6240\u6709\u4eba\u53ef\u4ee5%{cycle_period}\u5728\u6bcf\u53f0\u96fb\u8166/\u624b\u6a5f%{limited_time}\u3002"
                                        },
                                        by_ip: {
                                            text: "\u6240\u6709\u4eba\u53ef\u4ee5%{cycle_period}\u5728\u6bcf\u500bIP%{limited_time}\u3002"
                                        },
                                        by_weixin: {
                                            text: "\u6240\u6709\u4eba\u53ef\u4ee5%{cycle_period}\u5728\u6bcf\u5fae\u4fe1OpenID%{limited_time}\u3002"
                                        }
                                    },
                                    repeatable_by_day: {
                                        by_device: {
                                            text: "\u6240\u6709\u4eba\u53ef\u4ee5\u6bcf\u5929\u5728\u6bcf\u53f0\u96fb\u8166/\u624b\u6a5f\u586b\u5beb\u4e00\u6b21\u3002"
                                        },
                                        by_ip: {
                                            text: "\u6240\u6709\u4eba\u53ef\u4ee5\u6bcf\u5929\u5728\u6bcf\u500bIP\u586b\u5beb\u4e00\u6b21\u3002"
                                        },
                                        by_weixin: {
                                            text: "\u6240\u6709\u4eba\u53ef\u4ee5\u6bcf\u5929\u5728\u6bcf\u5fae\u4fe1OpenID\u586b\u5beb\u4e00\u6b21\u3002"
                                        }
                                    },
                                    unlimited: {
                                        text: "\u6240\u6709\u4eba\u53ef\u4ee5\u586b\u5beb\u3002"
                                    }
                                },
                                weixin_collect_way_html: '<span class="weixin-collect-way-text">\uff08\u901a\u904e%{weixin_account}\u6536\u96c6\u7528\u6236\u4fe1\u606f\uff09</span>',
                                weixin_followers_only: {
                                    once: {
                                        by_device: {
                                            text: "\u5fae\u4fe1\u7c89\u7d72\u53ef\u4ee5\u5728\u6bcf\u53f0\u96fb\u8166/\u624b\u6a5f\u586b\u5beb\u4e00\u6b21\u3002"
                                        },
                                        by_ip: {
                                            text: "\u5fae\u4fe1\u7c89\u7d72\u53ef\u4ee5\u5728\u6bcf\u500bIP\u586b\u5beb\u4e00\u6b21\u3002"
                                        },
                                        by_weixin: {
                                            text: "\u5fae\u4fe1\u7c89\u7d72\u53ef\u4ee5\u5728\u6bcf\u5fae\u4fe1OpenID\u586b\u5beb\u4e00\u6b21\u3002"
                                        }
                                    },
                                    repeatable: {
                                        text: "\u5fae\u4fe1\u7c89\u7d72\u53ef\u4ee5%{cycle_period}%{limited_time}\u3002"
                                    },
                                    unlimited: {
                                        text: "\u5fae\u4fe1\u7c89\u7d72\u53ef\u4ee5\u586b\u5beb\u3002"
                                    }
                                },
                                weixin_limited: {
                                    "false": "\u5728\u6240\u6709\u8a2d\u5099\u4e2d\uff0c",
                                    "true": "\u50c5\u9650\u5728\u5fae\u4fe1/\u4f01\u696d\u5fae\u4fe1\u4e2d\uff0c"
                                },
                                weixin_qiye_followers_only: {
                                    once: {
                                        by_device: {
                                            text: "\u4f01\u696d\u5fae\u4fe1\u6210\u54e1\u53ef\u4ee5\u5728\u6bcf\u53f0\u96fb\u8166/\u624b\u6a5f\u586b\u5beb\u4e00\u6b21\u3002"
                                        },
                                        by_ip: {
                                            text: "\u4f01\u696d\u5fae\u4fe1\u6210\u54e1\u53ef\u4ee5\u5728\u6bcf\u500bIP\u586b\u5beb\u4e00\u6b21\u3002"
                                        },
                                        by_weixin: {
                                            text: "\u4f01\u696d\u5fae\u4fe1\u6210\u54e1\u53ef\u4ee5\u5728\u6bcf\u5fae\u4fe1OpenID\u586b\u5beb\u4e00\u6b21\u3002"
                                        }
                                    },
                                    repeatable: {
                                        text: "\u4f01\u696d\u5fae\u4fe1\u6210\u54e1\u53ef\u4ee5%{cycle_period}%{limited_time}\u3002"
                                    },
                                    unlimited: {
                                        text: "\u4f01\u696d\u5fae\u4fe1\u6210\u54e1\u53ef\u4ee5\u586b\u5beb\u3002"
                                    }
                                }
                            }
                        },
                        weixin_qiye: "\u901a\u904e\u60a8\u81ea\u5df1\u7684\u4f01\u696d\u5fae\u4fe1\u865f\u4f86\u6536\u96c6",
                        weixin_qiye_disabled: "\u901a\u904e\u60a8\u81ea\u5df1\u7684\u4f01\u696d\u5fae\u4fe1\u865f\u4f86\u6536\u96c6(\u53ea\u652f\u6301\u5728\u4f01\u696d\u5fae\u4fe1\u4e2d\u586b\u5beb)"
                    },
                    input_form_name: "\u8acb\u8f38\u5165\u8868\u55ae\u540d",
                    leave_with_unsaved: "\u4f60\u7684\u8868\u55ae\u6709\u4e9b\u4fee\u6539\u5c1a\u672a\u4fdd\u5b58\uff0c\u662f\u5426\u78ba\u5b9a\u8981\u96e2\u958b\uff1f",
                    max_bulk_image_upload: "\u6bcf\u6b21\u8acb\u4e0d\u8981\u9078\u64c7\u8d85\u904e5\u5f35\u5716\u7247\uff0c\u53ef\u50b3\u591a\u6b21\u3002",
                    metrics: {
                        fill: "\u586b\u5beb",
                        search: "\u67e5\u8a62",
                        view: "\u700f\u89bd"
                    },
                    paused_pushing_notification: "\u5df2\u66ab\u505c",
                    pushing_notification: "\u63a8\u9001\u4e2d",
                    pushing_test_notification: "\u6e2c\u8a66",
                    pushing_test_notification_success: "\u63a8\u9001\u6e2c\u8a66\u6d88\u606f\u6210\u529f",
                    reached_max: "\u5354\u4f5c\u6210\u54e1\u5df2\u9054\u4e0a\u9650\uff0c\u7121\u6cd5\u7e7c\u7e8c\u6dfb\u52a0\u3002",
                    save_setting_failed: "\u4fdd\u5b58\u8a2d\u7f6e\u5931\u6557",
                    save_setting_success: "\u4fdd\u5b58\u8a2d\u7f6e\u6210\u529f",
                    search_condition: "\u67e5\u8a62\u689d\u4ef6\uff1a",
                    select_file_to_upload: "\u8acb\u9078\u64c7\u6216\u62d6\u62fd\u4e0a\u8f09\u6587\u4ef6\uff0c%{max_size}MB\u4ee5\u5167\u3002",
                    select_file_to_upload_with_max_quantity: "\u8acb\u9078\u64c7\u6216\u62d6\u62fd\u4e0a\u8f09\u6587\u4ef6\uff08\u6700\u591a %{max_file_quantity} \u500b\uff09\uff0c\u9650\u5236\u6bcf\u500b%{max_size}MB\u4ee5\u5167\u3002",
                    setting_saved_failed: "\u8a2d\u7f6e\u4fdd\u5b58\u5931\u6557",
                    setting_saved_success: "\u8a2d\u7f6e\u4fdd\u5b58\u6210\u529f",
                    switch_to_simple_mode: "\u5207\u63db\u5230\u7c21\u55ae\u6a21\u5f0f",
                    switch_to_upgrade_mode: "\u5207\u63db\u5230\u9032\u968e\u6a21\u5f0f",
                    theme: {
                        chuangkit_label: "\u5275\u5ba2\u8cbc",
                        fail_to_launch_chuangkit: "\u6253\u958b\u5275\u5ba2\u8cbc\u5931\u6557",
                        max_carousel_images_upload: "\u70ba\u4fdd\u8b49\u5c55\u793a\u6548\u679c\uff0c\u8acb\u52ff\u4e0a\u50b3\u8d85\u904e5\u5f35\u5716\u7247\u3002",
                        upload_header_from_local: "\u4e0a\u8f09",
                        warn_submit_btn_text_reach_max: "\u8acb\u8f38\u5165\u6700\u591a%{options_max}\u500b\u5b57",
                        warn_submit_btn_text_required: "\u8acb\u8f38\u5165\u63d0\u4ea4\u6309\u9215\u6587\u5b57\u5167\u5bb9"
                    },
                    unnamed_form: "\u672a\u547d\u540d\u8868\u55ae",
                    upload_file_only_support: "\u50c5\u652f\u63f4:",
                    warn_at_least_show_one_option: "\u81f3\u5c11\u986f\u793a\u4e00\u500b\u9078\u9805",
                    warn_cannot_hidden_field_with_rule: "\u5df2\u8a2d\u7f6e\u597d\u898f\u5247\u7684\u9078\u9805\u4e0d\u53ef\u96b1\u85cf",
                    warn_check_internet: "\uff1a\u8acb\u6aa2\u67e5\u4f60\u7684\u7db2\u8def\u9023\u63a5",
                    warn_field_limited: "\u5b57\u6bb5\u9650\u5236\u63d0\u9192",
                    warn_invalid_data_range: "\u7d50\u675f\u6642\u9593\u4e0d\u80fd\u65e9\u65bc\u958b\u59cb\u6642\u9593",
                    warn_load_entries_failed: "\u63d0\u9192\u6578\u64da\u52a0\u8f09\u5931\u6557",
                    warn_setting_reach_max_params: "\u6700\u591a\u53ef\u4ee5\u9078\u64c73\u500b\u9644\u52a0\u53c3\u6578",
                    warn_valid_url_required: "\u8acb\u8f38\u5165\u5408\u6cd5\u7684URL\u5730\u5740\uff0c\u4f8b\u5982\uff1ahttp://jinshuju.net/callback",
                    warn_weixin_cannot_collect_data: "\u4e0d\u80fd\u4f7f\u7528\u91d1\u6578\u64da\u8cec\u865f\u6536\u96c6\u5fae\u4fe1\u4fe1\u606f",
                    warn_weixin_setting_html: "\u56e0\u70ba\u8a72\u8868\u55ae\u8a2d\u7f6e\u6709\u4f60\u81ea\u5df1\u7684\u5fae\u4fe1\u652f\u4ed8\u8cec\u865f\uff0c\u6216\u8005\u8a72\u8868\u55ae\u8a2d\u7f6e\u7684Ping++ \u652f\u4ed8\u4e2d\u555f\u7528\u4e86\u5fae\u4fe1\u652f\u4ed8\u3002 </br></br>\u4f60\u53ea\u80fd\u9078\u64c7\u4f7f\u7528\u81ea\u5df1\u7684\u5fae\u4fe1\u516c\u773e\u8cec\u865f\u9032\u884c\u5fae\u4fe1\u7528\u6236\u6578\u64da\u6536\u96c6\uff0c\u8acb\u91cd\u65b0\u9078\u64c7\u3002",
                    warn_wrong_params: "\u8f38\u5165\u53c3\u6578\u932f\u8aa4"
                },
                global: {
                    copy_success: "\u62f7\u8c9d\u6210\u529f",
                    disable_for_e_qq_html: '<label><strong>\u5df2\u958b\u555f\u9a30\u8a0a\u5ee3\u544a\u63a8\u5ee3</strong></label>\n<div class="text-muted">\n  \u7576\u524d\u8868\u55ae\u5df2\u7d93\u751f\u6210\u6295\u653e\u93c8\u63a5\u4e26\u5728\u9a30\u8a0a\u793e\u4ea4\u5ee3\u544a\u4e2d\u9032\u884c\u6295\u653e\uff0c\u8a72\u884c\u70ba\u5c07\u9650\u88fd\u8868\u55ae\u7684\u7de8\u8f2f\u64cd\u4f5c\u3002\u5982\u9700\u4fee\u6539\u8868\u55ae\u6211\u5011\u5efa\u8b70\u4f60\u6309\u7167\u4ee5\u4e0b\u6b65\u9a5f\u9032\u884c\u64cd\u4f5c\u3002<a href="#tooltip_promot_process" data-toggle="collapse" class="click-to-view">\u9ede\u64ca\u67e5\u770b\u64cd\u4f5c\u6b65\u9a5f</a>\n  <div id="tooltip_promot_process" class="collapse">\n    ---------------------------------------------\n    <ul>\n      <li>\u7b2c\u4e00\u6b65\uff1a\u8907\u88fd\u9700\u8981\u6295\u653e\u7684\u8868\u55ae </li>\n      <li>\u7b2c\u4e8c\u6b65\uff1a\u5728\u65b0\u8868\u55ae\u4e2d\u9032\u884c\u8868\u55ae\u7684\u5b57\u6bb5\u7684\u589e\u6e1b\uff0c\u5b8c\u5584\u8868\u55ae\u898f\u5247\u548c\u76f8\u95dc\u8a2d\u7f6e</li>\n      <li>\u7b2c\u4e09\u6b65\uff1a\u5728\u767c\u5e03-\u8868\u55ae\u63a8\u5ee3\u9801\u9762\u4e2d\u751f\u6210\u63a8\u5ee3\u93c8\u63a5</li>\n      <li>\u7b2c\u56db\u6b65\uff1a\u524d\u5f80\u9a30\u8a0a\u793e\u4ea4\u5ee3\u544a\u5e73\u53f0\uff0c\u624b\u5de5\u8907\u88fd\u65b0\u8868\u55ae\u7684\u63a8\u5ee3\u93c8\u63a5\u66ff\u63db\u539f\u5ee3\u544a\u4e2d\u7684\u63a8\u5ee3\u93c8\u63a5</li>\n    </ul>\n  </div>\n</div>\n',
                    follow_our_wechat: "\u95dc\u6ce8\u91d1\u6578\u64da\u516c\u773e\u865f",
                    login: "\u91d1\u6578\u64da - \u8a3b\u518a",
                    mac_copy_shortcut: "\u4f7f\u7528\u2318-C\u62f7\u8c9d",
                    no_result: "\u6c92\u6709\u5339\u914d\u7684\u641c\u5c0b\u7d50\u679c",
                    notification: {
                        email_invalid: "\u767c\u9001\u81f3\u90f5\u7bb1\u683c\u5f0f\u4e0d\u5c0d",
                        invalid_values: "\u767c\u9001\u81f3\u90f5\u7bb1/\u624b\u6a5f\u865f\u683c\u5f0f\u4e0d\u5c0d",
                        loading: "\u8b80\u53d6\u4e2d...",
                        mobile_invalid: "\u767c\u9001\u81f3\u865f\u78bc\u683c\u5f0f\u4e0d\u5c0d\uff08\u50c5\u652f\u6301\u4e2d\u570b\u5927\u9678\u865f\u78bc\u767c\u9001\uff09",
                        no_new_message: "\u66ab\u7121\u65b0\u6d88\u606f"
                    },
                    others_copy_shortcut: "\u4f7f\u7528Ctrl-C\u62f7\u8c9d",
                    payment: {
                        confirm_to_pay: "\u78ba\u8a8d\u652f\u4ed8",
                        confirm_upgrade: "\u78ba\u8a8d\u5347\u7d1a",
                        create_payment_failed: "\u5275\u5efa\u652f\u4ed8\u5931\u6557",
                        page_expired: "\u9801\u9762\u904e\u671f\uff0c\u8acb\u5237\u65b0\u91cd\u65b0\u5617\u8a66",
                        paid_description_html: "\u5247\u539f\u5957\u9910\u62b5\u6263\u5f8c\uff0c\u9084\u5269\u9918<span class='highlight'>\uffe5%{refund_price}</span>\uff0c\u5c07\u4ee5\u9918\u984d\u7684\u5f62\u5f0f\uff0c\u9000\u56de\u5230\u4f60\u7684\u91d1\u6578\u64da\u8cec\u6236\u4e2d\u3002",
                        paid_success: "\u5145\u503c\u6210\u529f",
                        pay_diff_with_origin_price_to_finish_upgrade: "\u9700\u8981\u652f\u4ed8\u76f8\u61c9\u5dee\u50f9\u5b8c\u6210\u5347\u7d1a\u3002",
                        scan_alipay_to_pay: "\u652f\u4ed8\u5bf6\u6383\u78bc\u652f\u4ed8\u91d1\u984d: %{total_price} \u5143",
                        scan_weixin_to_pay: "\u5fae\u4fe1\u6383\u78bc\u652f\u4ed8\u91d1\u989d: %{total_price} \u5143",
                        topup_account: "\u8cec\u6236\u5145\u503c",
                        upgrade_success: "\u5347\u7d1a\u6210\u529f",
                        warn_get_weixin_info_failed: "\u5fae\u4fe1\u4fe1\u606f\u7372\u53d6\u5931\u6557\uff0c\u8acb\u5237\u65b0\u9801\u9762"
                    },
                    plan: {
                        per_month: "\u6708",
                        per_year: "\u5e74",
                        warn_network_error_refresh: "\u7db2\u8def\u51fa\u932f\uff0c\u8acb\u5237\u65b0\u91cd\u8a66"
                    },
                    qrcode: {
                        filename: "\u4e8c\u7dad\u78bc",
                        large_size: "\u5927\u865f",
                        medium_size: "\u4e2d\u865f",
                        small_size: "\u5c0f\u865f",
                        warn_no_qrcode_file: "\u6c92\u6709\u50b3\u5165\u4e8c\u7dad\u78bc\u6587\u672c"
                    },
                    share: {
                        to_mingdao: "\u5206\u4eab\u5230\u660e\u9053",
                        to_qzone: "\u5206\u4eab\u5230QZONE",
                        to_weibo: "\u5206\u4eab\u5230\u5fae\u535a"
                    },
                    signup: "\u91d1\u6578\u64da - \u767b\u5165",
                    sms: {
                        at_least: "\u81f3\u5c11",
                        description_html: '<div class="count-info"><span class="has-fields-1"></span>\u5df2\u8f38\u5165<span class="char-count"></span>\u500b\u5b57\uff08\u542b\u7c3d\u540d<span class="extra-info"></span>\uff09\uff0c<span class="has-fields-2"></span>\u6309<span class="sms-count"></span>\u689d\u8a08\u8cbb</div>',
                        except_fields: "\u9664\u8868\u55ae\u5b57\u6bb5\uff0c",
                        include_link_hint: "\u6aa2\u6e2c\u5230\u77ed\u4fe1\u5167\u5bb9\u4e2d\u5305\u542b\u93c8\u63a5\uff0c\u8acb\u5728\u93c8\u63a5\u524d\u5f8c\u6dfb\u52a0\u7a7a\u683c\uff0c\u4ee5\u78ba\u4fdd\u63a5\u6536\u8005\u53ef\u5728\u77ed\u4fe1\u4e2d\u6b63\u5e38\u6253\u958b\u93c8\u63a5\u3002",
                        preview: "\u7c21\u8a0a\u9810\u89bd",
                        send: "\u767c\u9001\u7c21\u8a0a",
                        warn_reach_max_length: "\u8f38\u5165\u5b57\u7b26\u8d85\u904e%{max_length}\u5b57\u767c\u9001\u9650\u5236\uff0c\u8acb\u522a\u6e1b\u7c21\u8a0a\u5167\u5bb9"
                    },
                    validator: {
                        condition_required: "\u8acb\u9078\u64c7\u689d\u4ef6",
                        duplicate_group: "\u67e5\u8a62\u689d\u4ef6\u91cd\u8907\uff0c\u8acb\u91cd\u65b0\u9078\u64c7",
                        email_format: "\u8acb\u8f38\u5165\u6b63\u78ba\u683c\u5f0f\u7684\u90f5\u7bb1",
                        email_or_mobile_format: "\u8acb\u8f38\u5165\u6b63\u78ba\u7684\u90f5\u7bb1\u621611\u4f4d\u624b\u6a5f\u865f",
                        email_required: "\u8acb\u8f38\u5165\u90f5\u7bb1",
                        mobile_format: "\u8acb\u8f38\u5165\u6b63\u78ba\u7684\u5927\u9678\u624b\u6a5f\u865f",
                        nickname_format: "\u66b1\u7a31\u50c5\u652f\u63f4\u4e2d\u82f1\u6587\u3001\u6578\u5b57\u548c\u4e0b\u5283\u7dda",
                        phone_required: "\u8acb\u8f38\u5165\u624b\u6a5f\u865f\u78bc",
                        verification_code_required: "\u8acb\u8f38\u5165\u624b\u6a5f\u9a57\u8b49\u78bc"
                    },
                    warn_browser_not_supported: "\u60a8\u7684\u700f\u89bd\u5668\u4e0d\u652f\u63f4\u76f4\u63a5\u62f7\u8c9d\uff0c\u8acb\u624b\u52d5\u62f7\u8c9d\uff01"
                },
                global_search: {
                    template_market_entrance_text: '\u67e5\u770b\u66f4\u591a"%{keyword}"\u6a21\u677f'
                },
                onboarding: {
                    forgot_password: {
                        warn_account_cannot_be_empty: "\u8cec\u865f\u4e0d\u80fd\u70ba\u7a7a",
                        warn_invalid_email: "\u8cec\u865f\u5c1a\u672a\u8a3b\u518a<a href=/signup>\u9ede\u6b64\u8a3b\u518a\u8cec\u865f</a>"
                    },
                    warn: {
                        account_cannot_be_empty: "\u90f5\u7bb1\u6216\u8005\u624b\u6a5f\u865f\u4e0d\u80fd\u70ba\u7a7a",
                        account_in_use: "\u90f5\u7bb1\u6216\u8005\u624b\u6a5f\u865f\u5df2\u88ab\u4f54\u7528",
                        captcha_cannot_be_empty: "\u9a57\u8b49\u78bc\u4e0d\u80fd\u70ba\u7a7a",
                        captcha_invalid: "\u9a57\u8b49\u78bc\u6709\u8aa4",
                        confirm_password_cannot_be_empty: "\u78ba\u8a8d\u5bc6\u78bc\u4e0d\u80fd\u70ba\u7a7a",
                        confirm_password_min_length: "\u78ba\u8a8d\u5bc6\u78bc\u4e0d\u80fd\u5c0f\u65bc6\u4f4d",
                        email_cannot_be_empty: "\u90f5\u7bb1\u4e0d\u80fd\u70ba\u7a7a",
                        email_format_invalid: "\u8acb\u8f38\u5165\u6b63\u78ba\u683c\u5f0f\u7684\u90f5\u7bb1",
                        invalid_email: "\u90f5\u7bb1\u5df2\u88ab\u4f54\u7528",
                        mobile_cannot_be_empty: "\u624b\u6a5f\u865f\u4e0d\u80fd\u70ba\u7a7a",
                        mobile_format_invalid: "\u8acb\u8f38\u5165\u6b63\u78ba\u7684\u624b\u6a5f\u865f",
                        nickname_in_use: "\u66b1\u7a31\u5df2\u88ab\u4f54\u7528",
                        nickname_reach_max: "\u66b1\u7a31\u9577\u5ea6\u61c9\u57282~20\u500b\u5b57\u4e4b\u9593",
                        password_cannot_be_empty: "\u5bc6\u78bc\u4e0d\u80fd\u70ba\u7a7a",
                        password_min_length: "\u8acb\u8f38\u5165\u81f3\u5c116\u4f4d\u5bc6\u78bc",
                        weixin_account_in_use: "\u8a72\u5fae\u4fe1\u865f\u5df2\u88ab\u4f54\u7528,\u8acb\u66f4\u63db\u5fae\u4fe1\u865f"
                    }
                },
                published_form: {
                    warn_get_weixin_info_failed: "\u5fae\u4fe1\u4fe1\u606f\u7372\u53d6\u5931\u6557\uff0c\u8acb\u91cd\u65b0\u6253\u958b\u8868\u55ae\uff1a"
                },
                report: {
                    sort_field_hide_detail_title_html: '\u96b1\u85cf\u5404\u9078\u9805\u6578\u64da<i class="gd-icon-angle-double-up"></i>',
                    sort_field_show_detail_title_html: '\u986f\u793a\u5404\u9078\u9805\u6578\u64da<i class="gd-icon-angle-double-down"></i>'
                },
                shopping_cart: {
                    header: {
                        count: "\u6578\u91cf",
                        goods_name: "\u5546\u54c1",
                        price: "\u55ae\u50f9",
                        seleted_goods: "\u5df2\u9078\u64c7\u5546\u54c1",
                        total_price: "\u5c0f\u8a08"
                    }
                },
                template: {
                    action_failed: "\u64cd\u4f5c\u5931\u6557",
                    comment_failed: "\u8a55\u8ad6\u5931\u6557",
                    comment_success: "\u8a55\u8ad6\u6210\u529f",
                    expand: "\u5c55\u958b\u986f\u793a\u5168\u90e8",
                    warn_reach_max_industries: "\u6700\u591a\u53ef\u4ee5\u9078\u64c73\u500b\u884c\u696d"
                },
                third_party: {
                    alipay_pay: "\u652f\u4ed8\u5bf6",
                    alipay_to_pay: "\u652f\u4ed8\u5bf6\u652f\u4ed8",
                    embedded_others: "\u4e0d\u80fd\u81ea\u9069\u61c9\u9ad8\u5ea6\uff0c\u8b39\u614e\u4f7f\u7528\u3002",
                    embedded_script: "\u53ef\u4ee5\u81ea\u9069\u61c9\u9ad8\u5ea6\uff0c\u63a8\u85a6\u4f7f\u7528\u3002",
                    paid: "\u5df2\u4ed8\u6b3e",
                    unpaid: "\u672a\u4ed8\u6b3e",
                    warn_failed_to_pay_resubmit: "\u652f\u4ed8\u672a\u6210\u529f\uff0c\u8acb\u91cd\u65b0\u63d0\u4ea4\u8868\u55ae",
                    warn_retrieve_qrcode_failed: "\u7372\u53d6\u652f\u4ed8\u4e8c\u7dad\u78bc\u5931\u6557\uff0c%{err_msg}\u3002",
                    warn_retrieve_wxpay_failed: "\u8abf\u7528\u652f\u4ed8\u63a7\u4ef6\u5931\u6557: %{err_msg}\u3002",
                    warn_retrieve_wxpay_qrcode_failed: "\u7372\u53d6\u5fae\u4fe1\u652f\u4ed8\u4e8c\u7dad\u78bc\u5931\u6557: %{err_msg}\u3002",
                    warn_retrieve_wxpay_qrcode_timeout: "\u7372\u53d6\u5fae\u4fe1\u652f\u4ed8\u4e8c\u7dad\u78bc\u8d85\u6642\uff0c\u8acb\u91cd\u65b0\u63d0\u4ea4\u652f\u4ed8",
                    warn_verify_weixin_setting: "\u8acb\u6aa2\u67e5\u5fae\u4fe1\u652f\u4ed8\u7684\u53c3\u6578\u662f\u5426\u914d\u7f6e\u6b63\u78ba\uff0c\u6216\u8005\u61c9\u7528\u5bc6\u9470\u548c\u5546\u6236\u652f\u4ed8\u5bc6\u9470\u662f\u5426\u5df2\u66f4\u6539\u3002",
                    weixin_pay: "\u5fae\u4fe1\u652f\u4ed8"
                },
                user: {
                    bind_weixin_fail: "\u7d81\u5b9a\u5fae\u4fe1\u63d0\u9192\u7d81\u5b9a\u5931\u6557",
                    bind_weixin_fail_text: "%{fail_message}\u3002\uff08\u8acb\u66f4\u63db\u5fae\u4fe1 \u6216 \u767b\u9304\u8a72\u8cec\u6236\u89e3\u7d81\u5f8c\u64cd\u4f5c\uff09",
                    bind_weixin_success: "\u7d81\u5b9a\u5fae\u4fe1\u63d0\u9192\u6210\u529f",
                    bind_weixin_success_text: "\u4f60\u73fe\u5728\u5c31\u53ef\u4ee5\u5be6\u6642\u63a5\u6536\u5230\u65b0\u6578\u64da\u5fae\u4fe1\u63d0\u9192\u4e86",
                    branding_off: "\u5df2\u95dc\u9589\u96b1\u85cfLogo",
                    branding_on: "\u5df2\u958b\u555f\u96b1\u85cfLogo",
                    btn_disable_cname: "\u505c\u7528\u81ea\u5b9a\u7fa9\u57df\u540d",
                    btn_enable_cname: "\u958b\u555f\u81ea\u5b9a\u7fa9\u57df\u540d",
                    change_from_role_to: "\u60a8\u78ba\u5b9a\u8981\u5c07\u81ea\u5df1\u5f9e%{origin_role}\u964d\u70ba%{selected_role}\u55ce?",
                    confirm_no_error: "\u78ba\u8a8d\u7121\u8aa4",
                    delete_role_title: "\u60a8\u78ba\u5b9a\u8981\u89e3\u9664\u5c0d\u8a72\u8868\u55ae\u7684\u6240\u6709\u6b0a\u9650\u55ce\uff1f",
                    delete_setting_failed: "\u522a\u9664\u8a2d\u7f6e\u5931\u6557",
                    delete_setting_success: "\u522a\u9664\u8a2d\u7f6e\u6210\u529f",
                    hide_usage_detail: "\u96b1\u85cf\u8a73\u7d30\u4f7f\u7528\u91cf",
                    open_weixin_pay: "\u540c\u6642\u958b\u555f\u5fae\u4fe1\u652f\u4ed8\u914d\u7f6e",
                    show_usage_detail: "\u6aa2\u8996\u8a73\u7d30\u4f7f\u7528\u91cf",
                    submitting: "\u63d0\u4ea4\u4e2d",
                    turn_off_custom_domain_content: "\u5982\u679c\u95dc\u9589\u81ea\u8a02\u57df\u540d\uff0c\u4e4b\u524d\u4f7f\u7528\u8a72\u57df\u540d\u7684\u8868\u55ae\u53ca\u61c9\u7528\u5c07\u7121\u6cd5\u6b63\u5e38\u8a2a\u554f\u3002\u78ba\u8a8d\u95dc\u9589\u9ebc\uff1f",
                    turn_off_custom_domain_title: "\u95dc\u9589\u81ea\u8a02\u57df\u540d",
                    update_nickname_failed: "\u66f4\u65b0\u66b1\u7a31\u5931\u6557",
                    update_nickname_success: "\u66f4\u65b0\u66b1\u7a31\u6210\u529f",
                    verify_email_sent: "\u9a57\u8b49\u90f5\u4ef6\u5df2\u767c\u9001\uff0c\u8acb\u67e5\u6536",
                    warn_item_cannot_be_empty: "\u8a72\u9805\u4e0d\u80fd\u70ba\u7a7a",
                    warn_network_error_retry: "\u7db2\u8def\u51fa\u932f\uff0c\u8acb\u7a0d\u5f8c\u518d\u8a66",
                    warn_nickname_cannot_be_empty: "\u66b1\u7a31\u4e0d\u80fd\u70ba\u7a7a",
                    warn_permission_denied: "\u4f60\u7121\u6b0a\u9032\u884c\u6b64\u64cd\u4f5c",
                    warn_send_email_fail_retry: "\u767c\u9001\u9a57\u8b49\u90f5\u4ef6\u5931\u6557\uff0c\u8acb\u7a0d\u5f8c\u91cd\u8a66",
                    warn_too_many_actions_retry: "\u983b\u7e41\u64cd\u4f5c\uff0c\u8acb\u65bc1\u5206\u9418\u5f8c\u91cd\u8a66\u3002",
                    warn_update_nickname_failed: "\u4fdd\u5b58\u6642\u767c\u751f\u4e86\u932f\u8aa4",
                    warn_verify_weixin_failed_retry: "\u5fae\u4fe1\u516c\u773e\u8cec\u865f\u9a57\u8b49\u5931\u6557\uff0c\u8acb\u91cd\u8a66"
                },
                warning: {
                    browser_version_too_low: "\u60a8\u4f7f\u7528\u7684\u700f\u89bd\u5668\u7248\u672c\u8f03\u4f4e\uff0c\u8acb\u5347\u7d1a\u5230IE10\u6216\u4f7f\u7528",
                    get_better_experience: "\u7372\u5f97\u66f4\u4f73\u9ad4\u9a57\u3002",
                    google_browser: "\u8c37\u6b4c\u700f\u89bd\u5668",
                    warn_entry_quota_used_up: "\u4f60\u672c\u6708\u6578\u64da\u6d41\u91cf\u5df2\u7528\u5b8c\uff0c\u8acb\u53ca\u6642\u5347\u7d1a\u5957\u9910\u6216\u5145\u503c"
                },
                yunpian_template: {
                    audit_sms: "\u767c\u8d77\u5be9\u6838",
                    change_template_disabled_reason: "\u7c21\u8a0a\u6a21\u677f\u5be9\u6838\u4e2d\uff0c\u4e0d\u53ef\u4fee\u6539\u3002",
                    create_template_disabled_reason: "\u53ea\u6709\u5728\u65b0\u5efa\u63a8\u9001\u63d0\u9192\u6642\u624d\u53ef\u5275\u5efa\u65b0\u6a21\u677f",
                    han_only_signature: "\u7c21\u8a0a\u7c3d\u540d\u4e0d\u80fd\u70ba\u7d14\u82f1\u6587\u6216\u6578\u5b57",
                    invalid_condition_value: "\u63a8\u9001\u6578\u64da\u689d\u4ef6\u4e0d\u80fd\u70ba\u7a7a",
                    invalid_content: "\u8acb\u586b\u5beb\u7c21\u8a0a\u5167\u5bb9",
                    invalid_recipient_api_code: "\u767c\u9001\u81f3\u689d\u4ef6\u4e0d\u80fd\u70ba\u7a7a",
                    invalid_recipients: "\u672a\u627e\u5230\u53ef\u767c\u9001\u7684\u624b\u6a5f\u865f\u78bc",
                    invalid_send_timing: "\u8acb\u9078\u64c7\u767c\u9001\u6642\u9593",
                    invalid_signature: "\u8acb\u586b\u5beb\u7c21\u8a0a\u7c3d\u540d",
                    invalid_signature_length: "\u7c21\u8a0a\u7c3d\u540d\u9577\u5ea6\u57282-10\u500b\u5b57\u4e4b\u9593",
                    invalid_sms_template: "\u8acb\u9078\u64c7\u4e00\u500b\u7c21\u8a0a\u6a21\u677f",
                    marketing_channel: "\u71df\u92b7\u7c21\u8a0a",
                    normal_channel: "\u666e\u901a\u7c21\u8a0a",
                    not_support_sms_when_intl_mobile_no: "\u570b\u969b\u624b\u6a5f\u865f\u66ab\u4e0d\u652f\u6301\u767c\u9001\u77ed\u4fe1\uff0c\u570b\u5167\u624b\u6a5f\u865f\u4e0d\u53d7\u5f71\u97ff",
                    replace_variable_placeholder: "<\u9ede\u64ca\u63d2\u5165\u5b57\u6bb5>",
                    reuse_template_disabled_reason: "\u7576\u524d\u6c92\u6709\u5df2\u5be9\u6838\u901a\u904e\u7684\u6a21\u677f",
                    send_data: {
                        all_data: "\u6240\u6709\u65b0\u589e\u6578\u64da",
                        special_data: "\u6240\u6709%{field}\u70ba%{value}\u7684\u6578\u64da"
                    },
                    send_failed_retry: "\u91cd\u767c\u5931\u6557, \u8acb\u91cd\u8a66",
                    send_sms: "\u767c\u9001\u7c21\u8a0a",
                    send_timing: {
                        datetime: "%{year}\u5e74%{month}%{day}\u65e5\u7684%{hour}\u6642%{minute}\u5206",
                        immediately: "\u7acb\u5373\u767c\u9001",
                        on_specified_datetime: "\u5c07\u5728%{datetime}\u767c\u9001",
                        scheduled_with_rule: "\u5c07\u5728%{field}%{date_offset_number}%{date_offset_unit}%{date_offset_action}\u7684%{hour}\u6642%{minute}\u5206\u767c\u9001"
                    },
                    send_to: {
                        form_field: "\u586b\u5beb\u7684%{field}"
                    },
                    sms_template_placeholder: "\u8acb\u9078\u64c7",
                    yunpian_channel_disabled_reason: "\u5df2\u5be9\u6838\u6210\u529f/\u5be9\u6838\u4e2d\u7684\u7c21\u8a0a\u6a21\u677f\u4e0d\u53ef\u4fee\u6539\u7c21\u8a0a\u985e\u578b"
                }
            }
        }
    }
}), function(e) {
    "function" == typeof define && define.amd ? define(["jquery"], e) : e(jQuery)
}(function(s) {
    function i(e, t) {
        var n, i, o, r = e.nodeName.toLowerCase();
        return "area" === r ? (i = (n = e.parentNode).name, !(!e.href || !i || "map" !== n.nodeName.toLowerCase()) && ( !! (o = s("img[usemap='#" + i + "']")[0]) && a(o))) : (/^(input|select|textarea|button|object)$/.test(r) ? !e.disabled : "a" === r && e.href || t) && a(e)
    }
    function a(e) {
        return s.expr.filters.visible(e) && !s(e).parents().addBack().filter(function() {
                return "hidden" === s.css(this, "visibility")
            }).length
    }
    var e, t, n, o;
    s.ui = s.ui || {}, s.extend(s.ui, {
        version: "1.11.4",
        keyCode: {
            BACKSPACE: 8,
            COMMA: 188,
            DELETE: 46,
            DOWN: 40,
            END: 35,
            ENTER: 13,
            ESCAPE: 27,
            HOME: 36,
            LEFT: 37,
            PAGE_DOWN: 34,
            PAGE_UP: 33,
            PERIOD: 190,
            RIGHT: 39,
            SPACE: 32,
            TAB: 9,
            UP: 38
        }
    }), s.fn.extend({
        scrollParent: function(e) {
            var t = this.css("position"),
                n = "absolute" === t,
                i = e ? /(auto|scroll|hidden)/ : /(auto|scroll)/,
                o = this.parents().filter(function() {
                    var e = s(this);
                    return (!n || "static" !== e.css("position")) && i.test(e.css("overflow") + e.css("overflow-y") + e.css("overflow-x"))
                }).eq(0);
            return "fixed" !== t && o.length ? o : s(this[0].ownerDocument || document)
        },
        uniqueId: (e = 0, function() {
            return this.each(function() {
                this.id || (this.id = "ui-id-" + ++e)
            })
        }),
        removeUniqueId: function() {
            return this.each(function() {
                /^ui-id-\d+$/.test(this.id) && s(this).removeAttr("id")
            })
        }
    }), s.extend(s.expr[":"], {
        data: s.expr.createPseudo ? s.expr.createPseudo(function(t) {
            return function(e) {
                return !!s.data(e, t)
            }
        }) : function(e, t, n) {
            return !!s.data(e, n[3])
        },
        focusable: function(e) {
            return i(e, !isNaN(s.attr(e, "tabindex")))
        },
        tabbable: function(e) {
            var t = s.attr(e, "tabindex"),
                n = isNaN(t);
            return (n || 0 <= t) && i(e, !n)
        }
    }), s("<a>").outerWidth(1).jquery || s.each(["Width", "Height"], function(e, n) {
        function i(e, t, n, i) {
            return s.each(o, function() {
                t -= parseFloat(s.css(e, "padding" + this)) || 0, n && (t -= parseFloat(s.css(e, "border" + this + "Width")) || 0), i && (t -= parseFloat(s.css(e, "margin" + this)) || 0)
            }), t
        }
        var o = "Width" === n ? ["Left", "Right"] : ["Top", "Bottom"],
            r = n.toLowerCase(),
            a = {
                innerWidth: s.fn.innerWidth,
                innerHeight: s.fn.innerHeight,
                outerWidth: s.fn.outerWidth,
                outerHeight: s.fn.outerHeight
            };
        s.fn["inner" + n] = function(e) {
            return e === undefined ? a["inner" + n].call(this) : this.each(function() {
                s(this).css(r, i(this, e) + "px")
            })
        }, s.fn["outer" + n] = function(e, t) {
            return "number" != typeof e ? a["outer" + n].call(this, e) : this.each(function() {
                s(this).css(r, i(this, e, !0, t) + "px")
            })
        }
    }), s.fn.addBack || (s.fn.addBack = function(e) {
        return this.add(null == e ? this.prevObject : this.prevObject.filter(e))
    }), s("<a>").data("a-b", "a").removeData("a-b").data("a-b") && (s.fn.removeData = (t = s.fn.removeData, function(e) {
        return arguments.length ? t.call(this, s.camelCase(e)) : t.call(this)
    })), s.ui.ie = !! /msie [\w.]+/.exec(navigator.userAgent.toLowerCase()), s.fn.extend({
        focus: (o = s.fn.focus, function(t, n) {
            return "number" == typeof t ? this.each(function() {
                var e = this;
                setTimeout(function() {
                    s(e).focus(), n && n.call(e)
                }, t)
            }) : o.apply(this, arguments)
        }),
        disableSelection: (n = "onselectstart" in document.createElement("div") ? "selectstart" : "mousedown", function() {
            return this.bind(n + ".ui-disableSelection", function(e) {
                e.preventDefault()
            })
        }),
        enableSelection: function() {
            return this.unbind(".ui-disableSelection")
        },
        zIndex: function(e) {
            if (e !== undefined) return this.css("zIndex", e);
            if (this.length) for (var t, n, i = s(this[0]); i.length && i[0] !== document;) {
                if (("absolute" === (t = i.css("position")) || "relative" === t || "fixed" === t) && (n = parseInt(i.css("zIndex"), 10), !isNaN(n) && 0 !== n)) return n;
                i = i.parent()
            }
            return 0
        }
    }), s.ui.plugin = {
        add: function(e, t, n) {
            var i, o = s.ui[e].prototype;
            for (i in n) o.plugins[i] = o.plugins[i] || [], o.plugins[i].push([t, n[i]])
        },
        call: function(e, t, n, i) {
            var o, r = e.plugins[t];
            if (r && (i || e.element[0].parentNode && 11 !== e.element[0].parentNode.nodeType)) for (o = 0; o < r.length; o++) e.options[r[o][0]] && r[o][1].apply(e.element, n)
        }
    }
}), function(e) {
    "function" == typeof define && define.amd ? define(["jquery"], e) : e(jQuery)
}(function(u) {
    var r, n = 0,
        s = Array.prototype.slice;
    return u.cleanData = (r = u.cleanData, function(e) {
        var t, n, i;
        for (i = 0; null != (n = e[i]); i++) try {
            (t = u._data(n, "events")) && t.remove && u(n).triggerHandler("remove")
        } catch (o) {}
        r(e)
    }), u.widget = function(e, n, t) {
        var i, o, r, a, s = {},
            l = e.split(".")[0];
        return e = e.split(".")[1], i = l + "-" + e, t || (t = n, n = u.Widget), u.expr[":"][i.toLowerCase()] = function(e) {
            return !!u.data(e, i)
        }, u[l] = u[l] || {}, o = u[l][e], r = u[l][e] = function(e, t) {
            if (!this._createWidget) return new r(e, t);
            arguments.length && this._createWidget(e, t)
        }, u.extend(r, o, {
            version: t.version,
            _proto: u.extend({}, t),
            _childConstructors: []
        }), (a = new n).options = u.widget.extend({}, a.options), u.each(t, function(t, i) {
            var o, r;
            u.isFunction(i) ? s[t] = (o = function() {
                return n.prototype[t].apply(this, arguments)
            }, r = function(e) {
                return n.prototype[t].apply(this, e)
            }, function() {
                var e, t = this._super,
                    n = this._superApply;
                return this._super = o, this._superApply = r, e = i.apply(this, arguments), this._super = t, this._superApply = n, e
            }) : s[t] = i
        }), r.prototype = u.widget.extend(a, {
            widgetEventPrefix: o && a.widgetEventPrefix || e
        }, s, {
            constructor: r,
            namespace: l,
            widgetName: e,
            widgetFullName: i
        }), o ? (u.each(o._childConstructors, function(e, t) {
            var n = t.prototype;
            u.widget(n.namespace + "." + n.widgetName, r, t._proto)
        }), delete o._childConstructors) : n._childConstructors.push(r), u.widget.bridge(e, r), r
    }, u.widget.extend = function(e) {
        for (var t, n, i = s.call(arguments, 1), o = 0, r = i.length; o < r; o++) for (t in i[o]) n = i[o][t], i[o].hasOwnProperty(t) && n !== undefined && (u.isPlainObject(n) ? e[t] = u.isPlainObject(e[t]) ? u.widget.extend({}, e[t], n) : u.widget.extend({}, n) : e[t] = n);
        return e
    }, u.widget.bridge = function(r, t) {
        var a = t.prototype.widgetFullName || r;
        u.fn[r] = function(n) {
            var e = "string" == typeof n,
                i = s.call(arguments, 1),
                o = this;
            return e ? this.each(function() {
                var e, t = u.data(this, a);
                return "instance" === n ? (o = t, !1) : t ? u.isFunction(t[n]) && "_" !== n.charAt(0) ? (e = t[n].apply(t, i)) !== t && e !== undefined ? (o = e && e.jquery ? o.pushStack(e.get()) : e, !1) : void 0 : u.error("no such method '" + n + "' for " + r + " widget instance") : u.error("cannot call methods on " + r + " prior to initialization; attempted to call method '" + n + "'")
            }) : (i.length && (n = u.widget.extend.apply(null, [n].concat(i))), this.each(function() {
                var e = u.data(this, a);
                e ? (e.option(n || {}), e._init && e._init()) : u.data(this, a, new t(n, this))
            })), o
        }
    }, u.Widget = function() {}, u.Widget._childConstructors = [], u.Widget.prototype = {
        widgetName: "widget",
        widgetEventPrefix: "",
        defaultElement: "<div>",
        options: {
            disabled: !1,
            create: null
        },
        _createWidget: function(e, t) {
            t = u(t || this.defaultElement || this)[0], this.element = u(t), this.uuid = n++, this.eventNamespace = "." + this.widgetName + this.uuid, this.bindings = u(), this.hoverable = u(), this.focusable = u(), t !== this && (u.data(t, this.widgetFullName, this), this._on(!0, this.element, {
                remove: function(e) {
                    e.target === t && this.destroy()
                }
            }), this.document = u(t.style ? t.ownerDocument : t.document || t), this.window = u(this.document[0].defaultView || this.document[0].parentWindow)), this.options = u.widget.extend({}, this.options, this._getCreateOptions(), e), this._create(), this._trigger("create", null, this._getCreateEventData()), this._init()
        },
        _getCreateOptions: u.noop,
        _getCreateEventData: u.noop,
        _create: u.noop,
        _init: u.noop,
        destroy: function() {
            this._destroy(), this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(u.camelCase(this.widgetFullName)), this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName + "-disabled ui-state-disabled"), this.bindings.unbind(this.eventNamespace), this.hoverable.removeClass("ui-state-hover"), this.focusable.removeClass("ui-state-focus")
        },
        _destroy: u.noop,
        widget: function() {
            return this.element
        },
        option: function(e, t) {
            var n, i, o, r = e;
            if (0 === arguments.length) return u.widget.extend({}, this.options);
            if ("string" == typeof e) if (r = {}, e = (n = e.split(".")).shift(), n.length) {
                for (i = r[e] = u.widget.extend({}, this.options[e]), o = 0; o < n.length - 1; o++) i[n[o]] = i[n[o]] || {}, i = i[n[o]];
                if (e = n.pop(), 1 === arguments.length) return i[e] === undefined ? null : i[e];
                i[e] = t
            } else {
                if (1 === arguments.length) return this.options[e] === undefined ? null : this.options[e];
                r[e] = t
            }
            return this._setOptions(r), this
        },
        _setOptions: function(e) {
            var t;
            for (t in e) this._setOption(t, e[t]);
            return this
        },
        _setOption: function(e, t) {
            return this.options[e] = t, "disabled" === e && (this.widget().toggleClass(this.widgetFullName + "-disabled", !! t), t && (this.hoverable.removeClass("ui-state-hover"), this.focusable.removeClass("ui-state-focus"))), this
        },
        enable: function() {
            return this._setOptions({
                disabled: !1
            })
        },
        disable: function() {
            return this._setOptions({
                disabled: !0
            })
        },
        _on: function(a, s, e) {
            var l, c = this;
            "boolean" != typeof a && (e = s, s = a, a = !1), e ? (s = l = u(s), this.bindings = this.bindings.add(s)) : (e = s, s = this.element, l = this.widget()), u.each(e, function(e, t) {
                function n() {
                    if (a || !0 !== c.options.disabled && !u(this).hasClass("ui-state-disabled")) return ("string" == typeof t ? c[t] : t).apply(c, arguments)
                }
                "string" != typeof t && (n.guid = t.guid = t.guid || n.guid || u.guid++);
                var i = e.match(/^([\w:-]*)\s*(.*)$/),
                    o = i[1] + c.eventNamespace,
                    r = i[2];
                r ? l.delegate(r, o, n) : s.bind(o, n)
            })
        },
        _off: function(e, t) {
            t = (t || "").split(" ").join(this.eventNamespace + " ") + this.eventNamespace, e.unbind(t).undelegate(t), this.bindings = u(this.bindings.not(e).get()), this.focusable = u(this.focusable.not(e).get()), this.hoverable = u(this.hoverable.not(e).get())
        },
        _delay: function(e, t) {
            function n() {
                return ("string" == typeof e ? i[e] : e).apply(i, arguments)
            }
            var i = this;
            return setTimeout(n, t || 0)
        },
        _hoverable: function(e) {
            this.hoverable = this.hoverable.add(e), this._on(e, {
                mouseenter: function(e) {
                    u(e.currentTarget).addClass("ui-state-hover")
                },
                mouseleave: function(e) {
                    u(e.currentTarget).removeClass("ui-state-hover")
                }
            })
        },
        _focusable: function(e) {
            this.focusable = this.focusable.add(e), this._on(e, {
                focusin: function(e) {
                    u(e.currentTarget).addClass("ui-state-focus")
                },
                focusout: function(e) {
                    u(e.currentTarget).removeClass("ui-state-focus")
                }
            })
        },
        _trigger: function(e, t, n) {
            var i, o, r = this.options[e];
            if (n = n || {}, (t = u.Event(t)).type = (e === this.widgetEventPrefix ? e : this.widgetEventPrefix + e).toLowerCase(), t.target = this.element[0], o = t.originalEvent) for (i in o) i in t || (t[i] = o[i]);
            return this.element.trigger(t, n), !(u.isFunction(r) && !1 === r.apply(this.element[0], [t].concat(n)) || t.isDefaultPrevented())
        }
    }, u.each({
        show: "fadeIn",
        hide: "fadeOut"
    }, function(r, a) {
        u.Widget.prototype["_" + r] = function(t, e, n) {
            "string" == typeof e && (e = {
                effect: e
            });
            var i, o = e ? !0 === e || "number" == typeof e ? a : e.effect || a : r;
            "number" == typeof(e = e || {}) && (e = {
                duration: e
            }), i = !u.isEmptyObject(e), e.complete = n, e.delay && t.delay(e.delay), i && u.effects && u.effects.effect[o] ? t[r](e) : o !== r && t[o] ? t[o](e.duration, e.easing, n) : t.queue(function(e) {
                u(this)[r](), n && n.call(t[0]), e()
            })
        }
    }), u.widget
}), function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./widget"], e) : e(jQuery)
}(function(o) {
    var r = !1;
    return o(document).mouseup(function() {
        r = !1
    }), o.widget("ui.mouse", {
        version: "1.11.4",
        options: {
            cancel: "input,textarea,button,select,option",
            distance: 1,
            delay: 0
        },
        _mouseInit: function() {
            var t = this;
            this.element.bind("mousedown." + this.widgetName, function(e) {
                return t._mouseDown(e)
            }).bind("click." + this.widgetName, function(e) {
                if (!0 === o.data(e.target, t.widgetName + ".preventClickEvent")) return o.removeData(e.target, t.widgetName + ".preventClickEvent"), e.stopImmediatePropagation(), !1
            }), this.started = !1
        },
        _mouseDestroy: function() {
            this.element.unbind("." + this.widgetName), this._mouseMoveDelegate && this.document.unbind("mousemove." + this.widgetName, this._mouseMoveDelegate).unbind("mouseup." + this.widgetName, this._mouseUpDelegate)
        },
        _mouseDown: function(e) {
            if (!r) {
                this._mouseMoved = !1, this._mouseStarted && this._mouseUp(e), this._mouseDownEvent = e;
                var t = this,
                    n = 1 === e.which,
                    i = !("string" != typeof this.options.cancel || !e.target.nodeName) && o(e.target).closest(this.options.cancel).length;
                return !(n && !i && this._mouseCapture(e)) || (this.mouseDelayMet = !this.options.delay, this.mouseDelayMet || (this._mouseDelayTimer = setTimeout(function() {
                        t.mouseDelayMet = !0
                    }, this.options.delay)), this._mouseDistanceMet(e) && this._mouseDelayMet(e) && (this._mouseStarted = !1 !== this._mouseStart(e), !this._mouseStarted) ? (e.preventDefault(), !0) : (!0 === o.data(e.target, this.widgetName + ".preventClickEvent") && o.removeData(e.target, this.widgetName + ".preventClickEvent"), this._mouseMoveDelegate = function(e) {
                        return t._mouseMove(e)
                    }, this._mouseUpDelegate = function(e) {
                        return t._mouseUp(e)
                    }, this.document.bind("mousemove." + this.widgetName, this._mouseMoveDelegate).bind("mouseup." + this.widgetName, this._mouseUpDelegate), e.preventDefault(), r = !0))
            }
        },
        _mouseMove: function(e) {
            if (this._mouseMoved) {
                if (o.ui.ie && (!document.documentMode || document.documentMode < 9) && !e.button) return this._mouseUp(e);
                if (!e.which) return this._mouseUp(e)
            }
            return (e.which || e.button) && (this._mouseMoved = !0), this._mouseStarted ? (this._mouseDrag(e), e.preventDefault()) : (this._mouseDistanceMet(e) && this._mouseDelayMet(e) && (this._mouseStarted = !1 !== this._mouseStart(this._mouseDownEvent, e), this._mouseStarted ? this._mouseDrag(e) : this._mouseUp(e)), !this._mouseStarted)
        },
        _mouseUp: function(e) {
            return this.document.unbind("mousemove." + this.widgetName, this._mouseMoveDelegate).unbind("mouseup." + this.widgetName, this._mouseUpDelegate), this._mouseStarted && (this._mouseStarted = !1, e.target === this._mouseDownEvent.target && o.data(e.target, this.widgetName + ".preventClickEvent", !0), this._mouseStop(e)), r = !1
        },
        _mouseDistanceMet: function(e) {
            return Math.max(Math.abs(this._mouseDownEvent.pageX - e.pageX), Math.abs(this._mouseDownEvent.pageY - e.pageY)) >= this.options.distance
        },
        _mouseDelayMet: function() {
            return this.mouseDelayMet
        },
        _mouseStart: function() {},
        _mouseDrag: function() {},
        _mouseStop: function() {},
        _mouseCapture: function() {
            return !0
        }
    })
}), function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./core", "./mouse", "./widget"], e) : e(jQuery)
}(function(h) {
    return h.widget("ui.sortable", h.ui.mouse, {
        version: "1.11.4",
        widgetEventPrefix: "sort",
        ready: !1,
        options: {
            appendTo: "parent",
            axis: !1,
            connectWith: !1,
            containment: !1,
            cursor: "auto",
            cursorAt: !1,
            dropOnEmpty: !0,
            forcePlaceholderSize: !1,
            forceHelperSize: !1,
            grid: !1,
            handle: !1,
            helper: "original",
            items: "> *",
            opacity: !1,
            placeholder: !1,
            revert: !1,
            scroll: !0,
            scrollSensitivity: 20,
            scrollSpeed: 20,
            scope: "default",
            tolerance: "intersect",
            zIndex: 1e3,
            activate: null,
            beforeStop: null,
            change: null,
            deactivate: null,
            out: null,
            over: null,
            receive: null,
            remove: null,
            sort: null,
            start: null,
            stop: null,
            update: null
        },
        _isOverAxis: function(e, t, n) {
            return t <= e && e < t + n
        },
        _isFloating: function(e) {
            return /left|right/.test(e.css("float")) || /inline|table-cell/.test(e.css("display"))
        },
        _create: function() {
            this.containerCache = {}, this.element.addClass("ui-sortable"), this.refresh(), this.offset = this.element.offset(), this._mouseInit(), this._setHandleClassName(), this.ready = !0
        },
        _setOption: function(e, t) {
            this._super(e, t), "handle" === e && this._setHandleClassName()
        },
        _setHandleClassName: function() {
            this.element.find(".ui-sortable-handle").removeClass("ui-sortable-handle"), h.each(this.items, function() {
                (this.instance.options.handle ? this.item.find(this.instance.options.handle) : this.item).addClass("ui-sortable-handle")
            })
        },
        _destroy: function() {
            this.element.removeClass("ui-sortable ui-sortable-disabled").find(".ui-sortable-handle").removeClass("ui-sortable-handle"), this._mouseDestroy();
            for (var e = this.items.length - 1; 0 <= e; e--) this.items[e].item.removeData(this.widgetName + "-item");
            return this
        },
        _mouseCapture: function(e, t) {
            var n = null,
                i = !1,
                o = this;
            return !this.reverting && (!this.options.disabled && "static" !== this.options.type && (this._refreshItems(e), h(e.target).parents().each(function() {
                    if (h.data(this, o.widgetName + "-item") === o) return n = h(this), !1
                }), h.data(e.target, o.widgetName + "-item") === o && (n = h(e.target)), !! n && (!(this.options.handle && !t && (h(this.options.handle, n).find("*").addBack().each(function() {
                    this === e.target && (i = !0)
                }), !i)) && (this.currentItem = n, this._removeCurrentsFromItems(), !0))))
        },
        _mouseStart: function(e, t, n) {
            var i, o, r = this.options;
            if ((this.currentContainer = this).refreshPositions(), this.helper = this._createHelper(e), this._cacheHelperProportions(), this._cacheMargins(), this.scrollParent = this.helper.scrollParent(), this.offset = this.currentItem.offset(), this.offset = {
                    top: this.offset.top - this.margins.top,
                    left: this.offset.left - this.margins.left
                }, h.extend(this.offset, {
                    click: {
                        left: e.pageX - this.offset.left,
                        top: e.pageY - this.offset.top
                    },
                    parent: this._getParentOffset(),
                    relative: this._getRelativeOffset()
                }), this.helper.css("position", "absolute"), this.cssPosition = this.helper.css("position"), this.originalPosition = this._generatePosition(e), this.originalPageX = e.pageX, this.originalPageY = e.pageY, r.cursorAt && this._adjustOffsetFromHelper(r.cursorAt), this.domPosition = {
                    prev: this.currentItem.prev()[0],
                    parent: this.currentItem.parent()[0]
                }, this.helper[0] !== this.currentItem[0] && this.currentItem.hide(), this._createPlaceholder(), r.containment && this._setContainment(), r.cursor && "auto" !== r.cursor && (o = this.document.find("body"), this.storedCursor = o.css("cursor"), o.css("cursor", r.cursor), this.storedStylesheet = h("<style>*{ cursor: " + r.cursor + " !important; }</style>").appendTo(o)), r.opacity && (this.helper.css("opacity") && (this._storedOpacity = this.helper.css("opacity")), this.helper.css("opacity", r.opacity)), r.zIndex && (this.helper.css("zIndex") && (this._storedZIndex = this.helper.css("zIndex")), this.helper.css("zIndex", r.zIndex)), this.scrollParent[0] !== this.document[0] && "HTML" !== this.scrollParent[0].tagName && (this.overflowOffset = this.scrollParent.offset()), this._trigger("start", e, this._uiHash()), this._preserveHelperProportions || this._cacheHelperProportions(), !n) for (i = this.containers.length - 1; 0 <= i; i--) this.containers[i]._trigger("activate", e, this._uiHash(this));
            return h.ui.ddmanager && (h.ui.ddmanager.current = this), h.ui.ddmanager && !r.dropBehaviour && h.ui.ddmanager.prepareOffsets(this, e), this.dragging = !0, this.helper.addClass("ui-sortable-helper"), this._mouseDrag(e), !0
        },
        _mouseDrag: function(e) {
            var t, n, i, o, r = this.options,
                a = !1;
            for (this.position = this._generatePosition(e), this.positionAbs = this._convertPositionTo("absolute"), this.lastPositionAbs || (this.lastPositionAbs = this.positionAbs), this.options.scroll && (this.scrollParent[0] !== this.document[0] && "HTML" !== this.scrollParent[0].tagName ? (this.overflowOffset.top + this.scrollParent[0].offsetHeight - e.pageY < r.scrollSensitivity ? this.scrollParent[0].scrollTop = a = this.scrollParent[0].scrollTop + r.scrollSpeed : e.pageY - this.overflowOffset.top < r.scrollSensitivity && (this.scrollParent[0].scrollTop = a = this.scrollParent[0].scrollTop - r.scrollSpeed), this.overflowOffset.left + this.scrollParent[0].offsetWidth - e.pageX < r.scrollSensitivity ? this.scrollParent[0].scrollLeft = a = this.scrollParent[0].scrollLeft + r.scrollSpeed : e.pageX - this.overflowOffset.left < r.scrollSensitivity && (this.scrollParent[0].scrollLeft = a = this.scrollParent[0].scrollLeft - r.scrollSpeed)) : (e.pageY - this.document.scrollTop() < r.scrollSensitivity ? a = this.document.scrollTop(this.document.scrollTop() - r.scrollSpeed) : this.window.height() - (e.pageY - this.document.scrollTop()) < r.scrollSensitivity && (a = this.document.scrollTop(this.document.scrollTop() + r.scrollSpeed)), e.pageX - this.document.scrollLeft() < r.scrollSensitivity ? a = this.document.scrollLeft(this.document.scrollLeft() - r.scrollSpeed) : this.window.width() - (e.pageX - this.document.scrollLeft()) < r.scrollSensitivity && (a = this.document.scrollLeft(this.document.scrollLeft() + r.scrollSpeed))), !1 !== a && h.ui.ddmanager && !r.dropBehaviour && h.ui.ddmanager.prepareOffsets(this, e)), this.positionAbs = this._convertPositionTo("absolute"), this.options.axis && "y" === this.options.axis || (this.helper[0].style.left = this.position.left + "px"), this.options.axis && "x" === this.options.axis || (this.helper[0].style.top = this.position.top + "px"), t = this.items.length - 1; 0 <= t; t--) if (i = (n = this.items[t]).item[0], (o = this._intersectsWithPointer(n)) && n.instance === this.currentContainer && !(i === this.currentItem[0] || this.placeholder[1 === o ? "next" : "prev"]()[0] === i || h.contains(this.placeholder[0], i) || "semi-dynamic" === this.options.type && h.contains(this.element[0], i))) {
                if (this.direction = 1 === o ? "down" : "up", "pointer" !== this.options.tolerance && !this._intersectsWithSides(n)) break;
                this._rearrange(e, n), this._trigger("change", e, this._uiHash());
                break
            }
            return this._contactContainers(e), h.ui.ddmanager && h.ui.ddmanager.drag(this, e), this._trigger("sort", e, this._uiHash()), this.lastPositionAbs = this.positionAbs, !1
        },
        _mouseStop: function(e, t) {
            if (e) {
                if (h.ui.ddmanager && !this.options.dropBehaviour && h.ui.ddmanager.drop(this, e), this.options.revert) {
                    var n = this,
                        i = this.placeholder.offset(),
                        o = this.options.axis,
                        r = {};
                    o && "x" !== o || (r.left = i.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollLeft)), o && "y" !== o || (r.top = i.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollTop)), this.reverting = !0, h(this.helper).animate(r, parseInt(this.options.revert, 10) || 500, function() {
                        n._clear(e)
                    })
                } else this._clear(e, t);
                return !1
            }
        },
        cancel: function() {
            if (this.dragging) {
                this._mouseUp({
                    target: null
                }), "original" === this.options.helper ? this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper") : this.currentItem.show();
                for (var e = this.containers.length - 1; 0 <= e; e--) this.containers[e]._trigger("deactivate", null, this._uiHash(this)), this.containers[e].containerCache.over && (this.containers[e]._trigger("out", null, this._uiHash(this)), this.containers[e].containerCache.over = 0)
            }
            return this.placeholder && (this.placeholder[0].parentNode && this.placeholder[0].parentNode.removeChild(this.placeholder[0]), "original" !== this.options.helper && this.helper && this.helper[0].parentNode && this.helper.remove(), h.extend(this, {
                helper: null,
                dragging: !1,
                reverting: !1,
                _noFinalSort: null
            }), this.domPosition.prev ? h(this.domPosition.prev).after(this.currentItem) : h(this.domPosition.parent).prepend(this.currentItem)), this
        },
        serialize: function(t) {
            var e = this._getItemsAsjQuery(t && t.connected),
                n = [];
            return t = t || {}, h(e).each(function() {
                var e = (h(t.item || this).attr(t.attribute || "id") || "").match(t.expression || /(.+)[\-=_](.+)/);
                e && n.push((t.key || e[1] + "[]") + "=" + (t.key && t.expression ? e[1] : e[2]))
            }), !n.length && t.key && n.push(t.key + "="), n.join("&")
        },
        toArray: function(e) {
            var t = this._getItemsAsjQuery(e && e.connected),
                n = [];
            return e = e || {}, t.each(function() {
                n.push(h(e.item || this).attr(e.attribute || "id") || "")
            }), n
        },
        _intersectsWith: function(e) {
            var t = this.positionAbs.left,
                n = t + this.helperProportions.width,
                i = this.positionAbs.top,
                o = i + this.helperProportions.height,
                r = e.left,
                a = r + e.width,
                s = e.top,
                l = s + e.height,
                c = this.offset.click.top,
                u = this.offset.click.left,
                d = "x" === this.options.axis || s < i + c && i + c < l,
                f = "y" === this.options.axis || r < t + u && t + u < a,
                h = d && f;
            return "pointer" === this.options.tolerance || this.options.forcePointerForContainers || "pointer" !== this.options.tolerance && this.helperProportions[this.floating ? "width" : "height"] > e[this.floating ? "width" : "height"] ? h : r < t + this.helperProportions.width / 2 && n - this.helperProportions.width / 2 < a && s < i + this.helperProportions.height / 2 && o - this.helperProportions.height / 2 < l
        },
        _intersectsWithPointer: function(e) {
            var t = "x" === this.options.axis || this._isOverAxis(this.positionAbs.top + this.offset.click.top, e.top, e.height),
                n = "y" === this.options.axis || this._isOverAxis(this.positionAbs.left + this.offset.click.left, e.left, e.width),
                i = t && n,
                o = this._getDragVerticalDirection(),
                r = this._getDragHorizontalDirection();
            return !!i && (this.floating ? r && "right" === r || "down" === o ? 2 : 1 : o && ("down" === o ? 2 : 1))
        },
        _intersectsWithSides: function(e) {
            var t = this._isOverAxis(this.positionAbs.top + this.offset.click.top, e.top + e.height / 2, e.height),
                n = this._isOverAxis(this.positionAbs.left + this.offset.click.left, e.left + e.width / 2, e.width),
                i = this._getDragVerticalDirection(),
                o = this._getDragHorizontalDirection();
            return this.floating && o ? "right" === o && n || "left" === o && !n : i && ("down" === i && t || "up" === i && !t)
        },
        _getDragVerticalDirection: function() {
            var e = this.positionAbs.top - this.lastPositionAbs.top;
            return 0 !== e && (0 < e ? "down" : "up")
        },
        _getDragHorizontalDirection: function() {
            var e = this.positionAbs.left - this.lastPositionAbs.left;
            return 0 !== e && (0 < e ? "right" : "left")
        },
        refresh: function(e) {
            return this._refreshItems(e), this._setHandleClassName(), this.refreshPositions(), this
        },
        _connectWith: function() {
            var e = this.options;
            return e.connectWith.constructor === String ? [e.connectWith] : e.connectWith
        },
        _getItemsAsjQuery: function(e) {
            function t() {
                a.push(this)
            }
            var n, i, o, r, a = [],
                s = [],
                l = this._connectWith();
            if (l && e) for (n = l.length - 1; 0 <= n; n--) for (i = (o = h(l[n], this.document[0])).length - 1; 0 <= i; i--)(r = h.data(o[i], this.widgetFullName)) && r !== this && !r.options.disabled && s.push([h.isFunction(r.options.items) ? r.options.items.call(r.element) : h(r.options.items, r.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), r]);
            for (s.push([h.isFunction(this.options.items) ? this.options.items.call(this.element, null, {
                options: this.options,
                item: this.currentItem
            }) : h(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]), n = s.length - 1; 0 <= n; n--) s[n][0].each(t);
            return h(a)
        },
        _removeCurrentsFromItems: function() {
            var n = this.currentItem.find(":data(" + this.widgetName + "-item)");
            this.items = h.grep(this.items, function(e) {
                for (var t = 0; t < n.length; t++) if (n[t] === e.item[0]) return !1;
                return !0
            })
        },
        _refreshItems: function(e) {
            this.items = [], this.containers = [this];
            var t, n, i, o, r, a, s, l, c = this.items,
                u = [
                    [h.isFunction(this.options.items) ? this.options.items.call(this.element[0], e, {
                        item: this.currentItem
                    }) : h(this.options.items, this.element), this]
                ],
                d = this._connectWith();
            if (d && this.ready) for (t = d.length - 1; 0 <= t; t--) for (n = (i = h(d[t], this.document[0])).length - 1; 0 <= n; n--)(o = h.data(i[n], this.widgetFullName)) && o !== this && !o.options.disabled && (u.push([h.isFunction(o.options.items) ? o.options.items.call(o.element[0], e, {
                item: this.currentItem
            }) : h(o.options.items, o.element), o]), this.containers.push(o));
            for (t = u.length - 1; 0 <= t; t--) for (r = u[t][1], n = 0, l = (a = u[t][0]).length; n < l; n++)(s = h(a[n])).data(this.widgetName + "-item", r), c.push({
                item: s,
                instance: r,
                width: 0,
                height: 0,
                left: 0,
                top: 0
            })
        },
        refreshPositions: function(e) {
            var t, n, i, o;
            for (this.floating = !! this.items.length && ("x" === this.options.axis || this._isFloating(this.items[0].item)), this.offsetParent && this.helper && (this.offset.parent = this._getParentOffset()), t = this.items.length - 1; 0 <= t; t--)(n = this.items[t]).instance !== this.currentContainer && this.currentContainer && n.item[0] !== this.currentItem[0] || (i = this.options.toleranceElement ? h(this.options.toleranceElement, n.item) : n.item, e || (n.width = i.outerWidth(), n.height = i.outerHeight()), o = i.offset(), n.left = o.left, n.top = o.top);
            if (this.options.custom && this.options.custom.refreshContainers) this.options.custom.refreshContainers.call(this);
            else for (t = this.containers.length - 1; 0 <= t; t--) o = this.containers[t].element.offset(), this.containers[t].containerCache.left = o.left, this.containers[t].containerCache.top = o.top, this.containers[t].containerCache.width = this.containers[t].element.outerWidth(), this.containers[t].containerCache.height = this.containers[t].element.outerHeight();
            return this
        },
        _createPlaceholder: function(n) {
            var i, o = (n = n || this).options;
            o.placeholder && o.placeholder.constructor !== String || (i = o.placeholder, o.placeholder = {
                element: function() {
                    var e = n.currentItem[0].nodeName.toLowerCase(),
                        t = h("<" + e + ">", n.document[0]).addClass(i || n.currentItem[0].className + " ui-sortable-placeholder").removeClass("ui-sortable-helper");
                    return "tbody" === e ? n._createTrPlaceholder(n.currentItem.find("tr").eq(0), h("<tr>", n.document[0]).appendTo(t)) : "tr" === e ? n._createTrPlaceholder(n.currentItem, t) : "img" === e && t.attr("src", n.currentItem.attr("src")), i || t.css("visibility", "hidden"), t
                },
                update: function(e, t) {
                    i && !o.forcePlaceholderSize || (t.height() || t.height(n.currentItem.innerHeight() - parseInt(n.currentItem.css("paddingTop") || 0, 10) - parseInt(n.currentItem.css("paddingBottom") || 0, 10)), t.width() || t.width(n.currentItem.innerWidth() - parseInt(n.currentItem.css("paddingLeft") || 0, 10) - parseInt(n.currentItem.css("paddingRight") || 0, 10)))
                }
            }), n.placeholder = h(o.placeholder.element.call(n.element, n.currentItem)), n.currentItem.after(n.placeholder), o.placeholder.update(n, n.placeholder)
        },
        _createTrPlaceholder: function(e, t) {
            var n = this;
            e.children().each(function() {
                h("<td>&#160;</td>", n.document[0]).attr("colspan", h(this).attr("colspan") || 1).appendTo(t)
            })
        },
        _contactContainers: function(e) {
            var t, n, i, o, r, a, s, l, c, u, d = null,
                f = null;
            for (t = this.containers.length - 1; 0 <= t; t--) if (!h.contains(this.currentItem[0], this.containers[t].element[0])) if (this._intersectsWith(this.containers[t].containerCache)) {
                if (d && h.contains(this.containers[t].element[0], d.element[0])) continue;
                d = this.containers[t], f = t
            } else this.containers[t].containerCache.over && (this.containers[t]._trigger("out", e, this._uiHash(this)), this.containers[t].containerCache.over = 0);
            if (d) if (1 === this.containers.length) this.containers[f].containerCache.over || (this.containers[f]._trigger("over", e, this._uiHash(this)), this.containers[f].containerCache.over = 1);
            else {
                for (i = 1e4, o = null, r = (c = d.floating || this._isFloating(this.currentItem)) ? "left" : "top", a = c ? "width" : "height", u = c ? "clientX" : "clientY", n = this.items.length - 1; 0 <= n; n--) h.contains(this.containers[f].element[0], this.items[n].item[0]) && this.items[n].item[0] !== this.currentItem[0] && (s = this.items[n].item.offset()[r], l = !1, e[u] - s > this.items[n][a] / 2 && (l = !0), Math.abs(e[u] - s) < i && (i = Math.abs(e[u] - s), o = this.items[n], this.direction = l ? "up" : "down"));
                if (!o && !this.options.dropOnEmpty) return;
                if (this.currentContainer === this.containers[f]) return void(this.currentContainer.containerCache.over || (this.containers[f]._trigger("over", e, this._uiHash()), this.currentContainer.containerCache.over = 1));
                o ? this._rearrange(e, o, null, !0) : this._rearrange(e, null, this.containers[f].element, !0), this._trigger("change", e, this._uiHash()), this.containers[f]._trigger("change", e, this._uiHash(this)), this.currentContainer = this.containers[f], this.options.placeholder.update(this.currentContainer, this.placeholder), this.containers[f]._trigger("over", e, this._uiHash(this)), this.containers[f].containerCache.over = 1
            }
        },
        _createHelper: function(e) {
            var t = this.options,
                n = h.isFunction(t.helper) ? h(t.helper.apply(this.element[0], [e, this.currentItem])) : "clone" === t.helper ? this.currentItem.clone() : this.currentItem;
            return n.parents("body").length || h("parent" !== t.appendTo ? t.appendTo : this.currentItem[0].parentNode)[0].appendChild(n[0]), n[0] === this.currentItem[0] && (this._storedCSS = {
                width: this.currentItem[0].style.width,
                height: this.currentItem[0].style.height,
                position: this.currentItem.css("position"),
                top: this.currentItem.css("top"),
                left: this.currentItem.css("left")
            }), n[0].style.width && !t.forceHelperSize || n.width(this.currentItem.width()), n[0].style.height && !t.forceHelperSize || n.height(this.currentItem.height()), n
        },
        _adjustOffsetFromHelper: function(e) {
            "string" == typeof e && (e = e.split(" ")), h.isArray(e) && (e = {
                left: +e[0],
                top: +e[1] || 0
            }), "left" in e && (this.offset.click.left = e.left + this.margins.left), "right" in e && (this.offset.click.left = this.helperProportions.width - e.right + this.margins.left), "top" in e && (this.offset.click.top = e.top + this.margins.top), "bottom" in e && (this.offset.click.top = this.helperProportions.height - e.bottom + this.margins.top)
        },
        _getParentOffset: function() {
            this.offsetParent = this.helper.offsetParent();
            var e = this.offsetParent.offset();
            return "absolute" === this.cssPosition && this.scrollParent[0] !== this.document[0] && h.contains(this.scrollParent[0], this.offsetParent[0]) && (e.left += this.scrollParent.scrollLeft(), e.top += this.scrollParent.scrollTop()), (this.offsetParent[0] === this.document[0].body || this.offsetParent[0].tagName && "html" === this.offsetParent[0].tagName.toLowerCase() && h.ui.ie) && (e = {
                top: 0,
                left: 0
            }), {
                top: e.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
                left: e.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
            }
        },
        _getRelativeOffset: function() {
            if ("relative" === this.cssPosition) {
                var e = this.currentItem.position();
                return {
                    top: e.top - (parseInt(this.helper.css("top"), 10) || 0) + this.scrollParent.scrollTop(),
                    left: e.left - (parseInt(this.helper.css("left"), 10) || 0) + this.scrollParent.scrollLeft()
                }
            }
            return {
                top: 0,
                left: 0
            }
        },
        _cacheMargins: function() {
            this.margins = {
                left: parseInt(this.currentItem.css("marginLeft"), 10) || 0,
                top: parseInt(this.currentItem.css("marginTop"), 10) || 0
            }
        },
        _cacheHelperProportions: function() {
            this.helperProportions = {
                width: this.helper.outerWidth(),
                height: this.helper.outerHeight()
            }
        },
        _setContainment: function() {
            var e, t, n, i = this.options;
            "parent" === i.containment && (i.containment = this.helper[0].parentNode), "document" !== i.containment && "window" !== i.containment || (this.containment = [0 - this.offset.relative.left - this.offset.parent.left, 0 - this.offset.relative.top - this.offset.parent.top, "document" === i.containment ? this.document.width() : this.window.width() - this.helperProportions.width - this.margins.left, ("document" === i.containment ? this.document.width() : this.window.height() || this.document[0].body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top]), /^(document|window|parent)$/.test(i.containment) || (e = h(i.containment)[0], t = h(i.containment).offset(), n = "hidden" !== h(e).css("overflow"), this.containment = [t.left + (parseInt(h(e).css("borderLeftWidth"), 10) || 0) + (parseInt(h(e).css("paddingLeft"), 10) || 0) - this.margins.left, t.top + (parseInt(h(e).css("borderTopWidth"), 10) || 0) + (parseInt(h(e).css("paddingTop"), 10) || 0) - this.margins.top, t.left + (n ? Math.max(e.scrollWidth, e.offsetWidth) : e.offsetWidth) - (parseInt(h(e).css("borderLeftWidth"), 10) || 0) - (parseInt(h(e).css("paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left, t.top + (n ? Math.max(e.scrollHeight, e.offsetHeight) : e.offsetHeight) - (parseInt(h(e).css("borderTopWidth"), 10) || 0) - (parseInt(h(e).css("paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top])
        },
        _convertPositionTo: function(e, t) {
            t || (t = this.position);
            var n = "absolute" === e ? 1 : -1,
                i = "absolute" !== this.cssPosition || this.scrollParent[0] !== this.document[0] && h.contains(this.scrollParent[0], this.offsetParent[0]) ? this.scrollParent : this.offsetParent,
                o = /(html|body)/i.test(i[0].tagName);
            return {
                top: t.top + this.offset.relative.top * n + this.offset.parent.top * n - ("fixed" === this.cssPosition ? -this.scrollParent.scrollTop() : o ? 0 : i.scrollTop()) * n,
                left: t.left + this.offset.relative.left * n + this.offset.parent.left * n - ("fixed" === this.cssPosition ? -this.scrollParent.scrollLeft() : o ? 0 : i.scrollLeft()) * n
            }
        },
        _generatePosition: function(e) {
            var t, n, i = this.options,
                o = e.pageX,
                r = e.pageY,
                a = "absolute" !== this.cssPosition || this.scrollParent[0] !== this.document[0] && h.contains(this.scrollParent[0], this.offsetParent[0]) ? this.scrollParent : this.offsetParent,
                s = /(html|body)/i.test(a[0].tagName);
            return "relative" !== this.cssPosition || this.scrollParent[0] !== this.document[0] && this.scrollParent[0] !== this.offsetParent[0] || (this.offset.relative = this._getRelativeOffset()), this.originalPosition && (this.containment && (e.pageX - this.offset.click.left < this.containment[0] && (o = this.containment[0] + this.offset.click.left), e.pageY - this.offset.click.top < this.containment[1] && (r = this.containment[1] + this.offset.click.top), e.pageX - this.offset.click.left > this.containment[2] && (o = this.containment[2] + this.offset.click.left), e.pageY - this.offset.click.top > this.containment[3] && (r = this.containment[3] + this.offset.click.top)), i.grid && (t = this.originalPageY + Math.round((r - this.originalPageY) / i.grid[1]) * i.grid[1], r = this.containment ? t - this.offset.click.top >= this.containment[1] && t - this.offset.click.top <= this.containment[3] ? t : t - this.offset.click.top >= this.containment[1] ? t - i.grid[1] : t + i.grid[1] : t, n = this.originalPageX + Math.round((o - this.originalPageX) / i.grid[0]) * i.grid[0], o = this.containment ? n - this.offset.click.left >= this.containment[0] && n - this.offset.click.left <= this.containment[2] ? n : n - this.offset.click.left >= this.containment[0] ? n - i.grid[0] : n + i.grid[0] : n)), {
                top: r - this.offset.click.top - this.offset.relative.top - this.offset.parent.top + ("fixed" === this.cssPosition ? -this.scrollParent.scrollTop() : s ? 0 : a.scrollTop()),
                left: o - this.offset.click.left - this.offset.relative.left - this.offset.parent.left + ("fixed" === this.cssPosition ? -this.scrollParent.scrollLeft() : s ? 0 : a.scrollLeft())
            }
        },
        _rearrange: function(e, t, n, i) {
            n ? n[0].appendChild(this.placeholder[0]) : t.item[0].parentNode.insertBefore(this.placeholder[0], "down" === this.direction ? t.item[0] : t.item[0].nextSibling), this.counter = this.counter ? ++this.counter : 1;
            var o = this.counter;
            this._delay(function() {
                o === this.counter && this.refreshPositions(!i)
            })
        },
        _clear: function(e, t) {
            function n(t, n, i) {
                return function(e) {
                    i._trigger(t, e, n._uiHash(n))
                }
            }
            this.reverting = !1;
            var i, o = [];
            if (!this._noFinalSort && this.currentItem.parent().length && this.placeholder.before(this.currentItem), this._noFinalSort = null, this.helper[0] === this.currentItem[0]) {
                for (i in this._storedCSS)"auto" !== this._storedCSS[i] && "static" !== this._storedCSS[i] || (this._storedCSS[i] = "");
                this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")
            } else this.currentItem.show();
            for (this.fromOutside && !t && o.push(function(e) {
                this._trigger("receive", e, this._uiHash(this.fromOutside))
            }), !this.fromOutside && this.domPosition.prev === this.currentItem.prev().not(".ui-sortable-helper")[0] && this.domPosition.parent === this.currentItem.parent()[0] || t || o.push(function(e) {
                this._trigger("update", e, this._uiHash())
            }), this !== this.currentContainer && (t || (o.push(function(e) {
                this._trigger("remove", e, this._uiHash())
            }), o.push(function(t) {
                return function(e) {
                    t._trigger("receive", e, this._uiHash(this))
                }
            }.call(this, this.currentContainer)), o.push(function(t) {
                return function(e) {
                    t._trigger("update", e, this._uiHash(this))
                }
            }.call(this, this.currentContainer)))), i = this.containers.length - 1; 0 <= i; i--) t || o.push(n("deactivate", this, this.containers[i])), this.containers[i].containerCache.over && (o.push(n("out", this, this.containers[i])), this.containers[i].containerCache.over = 0);
            if (this.storedCursor && (this.document.find("body").css("cursor", this.storedCursor), this.storedStylesheet.remove()), this._storedOpacity && this.helper.css("opacity", this._storedOpacity), this._storedZIndex && this.helper.css("zIndex", "auto" === this._storedZIndex ? "" : this._storedZIndex), this.dragging = !1, t || this._trigger("beforeStop", e, this._uiHash()), this.placeholder[0].parentNode.removeChild(this.placeholder[0]), this.cancelHelperRemoval || (this.helper[0] !== this.currentItem[0] && this.helper.remove(), this.helper = null), !t) {
                for (i = 0; i < o.length; i++) o[i].call(this, e);
                this._trigger("stop", e, this._uiHash())
            }
            return this.fromOutside = !1, !this.cancelHelperRemoval
        },
        _trigger: function() {
            !1 === h.Widget.prototype._trigger.apply(this, arguments) && this.cancel()
        },
        _uiHash: function(e) {
            var t = e || this;
            return {
                helper: t.helper,
                placeholder: t.placeholder || h([]),
                position: t.position,
                originalPosition: t.originalPosition,
                offset: t.positionAbs,
                item: t.currentItem,
                sender: e ? e.element : null
            }
        }
    })
}), function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./core", "./mouse", "./widget"], e) : e(jQuery)
}(function(y) {
    return y.widget("ui.draggable", y.ui.mouse, {
        version: "1.11.4",
        widgetEventPrefix: "drag",
        options: {
            addClasses: !0,
            appendTo: "parent",
            axis: !1,
            connectToSortable: !1,
            containment: !1,
            cursor: "auto",
            cursorAt: !1,
            grid: !1,
            handle: !1,
            helper: "original",
            iframeFix: !1,
            opacity: !1,
            refreshPositions: !1,
            revert: !1,
            revertDuration: 500,
            scope: "default",
            scroll: !0,
            scrollSensitivity: 20,
            scrollSpeed: 20,
            snap: !1,
            snapMode: "both",
            snapTolerance: 20,
            stack: !1,
            zIndex: !1,
            drag: null,
            start: null,
            stop: null
        },
        _create: function() {
            "original" === this.options.helper && this._setPositionRelative(), this.options.addClasses && this.element.addClass("ui-draggable"), this.options.disabled && this.element.addClass("ui-draggable-disabled"), this._setHandleClassName(), this._mouseInit()
        },
        _setOption: function(e, t) {
            this._super(e, t), "handle" === e && (this._removeHandleClassName(), this._setHandleClassName())
        },
        _destroy: function() {
            (this.helper || this.element).is(".ui-draggable-dragging") ? this.destroyOnClear = !0 : (this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"), this._removeHandleClassName(), this._mouseDestroy())
        },
        _mouseCapture: function(e) {
            var t = this.options;
            return this._blurActiveElement(e), !(this.helper || t.disabled || 0 < y(e.target).closest(".ui-resizable-handle").length) && (this.handle = this._getHandle(e), !! this.handle && (this._blockFrames(!0 === t.iframeFix ? "iframe" : t.iframeFix), !0))
        },
        _blockFrames: function(e) {
            this.iframeBlocks = this.document.find(e).map(function() {
                var e = y(this);
                return y("<div>").css("position", "absolute").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0]
            })
        },
        _unblockFrames: function() {
            this.iframeBlocks && (this.iframeBlocks.remove(), delete this.iframeBlocks)
        },
        _blurActiveElement: function(e) {
            var t = this.document[0];
            if (this.handleElement.is(e.target)) try {
                t.activeElement && "body" !== t.activeElement.nodeName.toLowerCase() && y(t.activeElement).blur()
            } catch (n) {}
        },
        _mouseStart: function(e) {
            var t = this.options;
            return this.helper = this._createHelper(e), this.helper.addClass("ui-draggable-dragging"), this._cacheHelperProportions(), y.ui.ddmanager && (y.ui.ddmanager.current = this), this._cacheMargins(), this.cssPosition = this.helper.css("position"), this.scrollParent = this.helper.scrollParent(!0), this.offsetParent = this.helper.offsetParent(), this.hasFixedAncestor = 0 < this.helper.parents().filter(function() {
                    return "fixed" === y(this).css("position")
                }).length, this.positionAbs = this.element.offset(), this._refreshOffsets(e), this.originalPosition = this.position = this._generatePosition(e, !1), this.originalPageX = e.pageX, this.originalPageY = e.pageY, t.cursorAt && this._adjustOffsetFromHelper(t.cursorAt), this._setContainment(), !1 === this._trigger("start", e) ? (this._clear(), !1) : (this._cacheHelperProportions(), y.ui.ddmanager && !t.dropBehaviour && y.ui.ddmanager.prepareOffsets(this, e), this._normalizeRightBottom(), this._mouseDrag(e, !0), y.ui.ddmanager && y.ui.ddmanager.dragStart(this, e), !0)
        },
        _refreshOffsets: function(e) {
            this.offset = {
                top: this.positionAbs.top - this.margins.top,
                left: this.positionAbs.left - this.margins.left,
                scroll: !1,
                parent: this._getParentOffset(),
                relative: this._getRelativeOffset()
            }, this.offset.click = {
                left: e.pageX - this.offset.left,
                top: e.pageY - this.offset.top
            }
        },
        _mouseDrag: function(e, t) {
            if (this.hasFixedAncestor && (this.offset.parent = this._getParentOffset()), this.position = this._generatePosition(e, !0), this.positionAbs = this._convertPositionTo("absolute"), !t) {
                var n = this._uiHash();
                if (!1 === this._trigger("drag", e, n)) return this._mouseUp({}), !1;
                this.position = n.position
            }
            return this.helper[0].style.left = this.position.left + "px", this.helper[0].style.top = this.position.top + "px", y.ui.ddmanager && y.ui.ddmanager.drag(this, e), !1
        },
        _mouseStop: function(e) {
            var t = this,
                n = !1;
            return y.ui.ddmanager && !this.options.dropBehaviour && (n = y.ui.ddmanager.drop(this, e)), this.dropped && (n = this.dropped, this.dropped = !1), "invalid" === this.options.revert && !n || "valid" === this.options.revert && n || !0 === this.options.revert || y.isFunction(this.options.revert) && this.options.revert.call(this.element, n) ? y(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
                !1 !== t._trigger("stop", e) && t._clear()
            }) : !1 !== this._trigger("stop", e) && this._clear(), !1
        },
        _mouseUp: function(e) {
            return this._unblockFrames(), y.ui.ddmanager && y.ui.ddmanager.dragStop(this, e), this.handleElement.is(e.target) && this.element.focus(), y.ui.mouse.prototype._mouseUp.call(this, e)
        },
        cancel: function() {
            return this.helper.is(".ui-draggable-dragging") ? this._mouseUp({}) : this._clear(), this
        },
        _getHandle: function(e) {
            return !this.options.handle || !! y(e.target).closest(this.element.find(this.options.handle)).length
        },
        _setHandleClassName: function() {
            this.handleElement = this.options.handle ? this.element.find(this.options.handle) : this.element, this.handleElement.addClass("ui-draggable-handle")
        },
        _removeHandleClassName: function() {
            this.handleElement.removeClass("ui-draggable-handle")
        },
        _createHelper: function(e) {
            var t = this.options,
                n = y.isFunction(t.helper),
                i = n ? y(t.helper.apply(this.element[0], [e])) : "clone" === t.helper ? this.element.clone().removeAttr("id") : this.element;
            return i.parents("body").length || i.appendTo("parent" === t.appendTo ? this.element[0].parentNode : t.appendTo), n && i[0] === this.element[0] && this._setPositionRelative(), i[0] === this.element[0] || /(fixed|absolute)/.test(i.css("position")) || i.css("position", "absolute"), i
        },
        _setPositionRelative: function() {
            /^(?:r|a|f)/.test(this.element.css("position")) || (this.element[0].style.position = "relative")
        },
        _adjustOffsetFromHelper: function(e) {
            "string" == typeof e && (e = e.split(" ")), y.isArray(e) && (e = {
                left: +e[0],
                top: +e[1] || 0
            }), "left" in e && (this.offset.click.left = e.left + this.margins.left), "right" in e && (this.offset.click.left = this.helperProportions.width - e.right + this.margins.left), "top" in e && (this.offset.click.top = e.top + this.margins.top), "bottom" in e && (this.offset.click.top = this.helperProportions.height - e.bottom + this.margins.top)
        },
        _isRootNode: function(e) {
            return /(html|body)/i.test(e.tagName) || e === this.document[0]
        },
        _getParentOffset: function() {
            var e = this.offsetParent.offset(),
                t = this.document[0];
            return "absolute" === this.cssPosition && this.scrollParent[0] !== t && y.contains(this.scrollParent[0], this.offsetParent[0]) && (e.left += this.scrollParent.scrollLeft(), e.top += this.scrollParent.scrollTop()), this._isRootNode(this.offsetParent[0]) && (e = {
                top: 0,
                left: 0
            }), {
                top: e.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
                left: e.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
            }
        },
        _getRelativeOffset: function() {
            if ("relative" !== this.cssPosition) return {
                top: 0,
                left: 0
            };
            var e = this.element.position(),
                t = this._isRootNode(this.scrollParent[0]);
            return {
                top: e.top - (parseInt(this.helper.css("top"), 10) || 0) + (t ? 0 : this.scrollParent.scrollTop()),
                left: e.left - (parseInt(this.helper.css("left"), 10) || 0) + (t ? 0 : this.scrollParent.scrollLeft())
            }
        },
        _cacheMargins: function() {
            this.margins = {
                left: parseInt(this.element.css("marginLeft"), 10) || 0,
                top: parseInt(this.element.css("marginTop"), 10) || 0,
                right: parseInt(this.element.css("marginRight"), 10) || 0,
                bottom: parseInt(this.element.css("marginBottom"), 10) || 0
            }
        },
        _cacheHelperProportions: function() {
            this.helperProportions = {
                width: this.helper.outerWidth(),
                height: this.helper.outerHeight()
            }
        },
        _setContainment: function() {
            var e, t, n, i = this.options,
                o = this.document[0];
            this.relativeContainer = null, i.containment ? "window" !== i.containment ? "document" !== i.containment ? i.containment.constructor !== Array ? ("parent" === i.containment && (i.containment = this.helper[0].parentNode), (n = (t = y(i.containment))[0]) && (e = /(scroll|auto)/.test(t.css("overflow")), this.containment = [(parseInt(t.css("borderLeftWidth"), 10) || 0) + (parseInt(t.css("paddingLeft"), 10) || 0), (parseInt(t.css("borderTopWidth"), 10) || 0) + (parseInt(t.css("paddingTop"), 10) || 0), (e ? Math.max(n.scrollWidth, n.offsetWidth) : n.offsetWidth) - (parseInt(t.css("borderRightWidth"), 10) || 0) - (parseInt(t.css("paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left - this.margins.right, (e ? Math.max(n.scrollHeight, n.offsetHeight) : n.offsetHeight) - (parseInt(t.css("borderBottomWidth"), 10) || 0) - (parseInt(t.css("paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top - this.margins.bottom], this.relativeContainer = t)) : this.containment = i.containment : this.containment = [0, 0, y(o).width() - this.helperProportions.width - this.margins.left, (y(o).height() || o.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top] : this.containment = [y(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left, y(window).scrollTop() - this.offset.relative.top - this.offset.parent.top, y(window).scrollLeft() + y(window).width() - this.helperProportions.width - this.margins.left, y(window).scrollTop() + (y(window).height() || o.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top] : this.containment = null
        },
        _convertPositionTo: function(e, t) {
            t || (t = this.position);
            var n = "absolute" === e ? 1 : -1,
                i = this._isRootNode(this.scrollParent[0]);
            return {
                top: t.top + this.offset.relative.top * n + this.offset.parent.top * n - ("fixed" === this.cssPosition ? -this.offset.scroll.top : i ? 0 : this.offset.scroll.top) * n,
                left: t.left + this.offset.relative.left * n + this.offset.parent.left * n - ("fixed" === this.cssPosition ? -this.offset.scroll.left : i ? 0 : this.offset.scroll.left) * n
            }
        },
        _generatePosition: function(e, t) {
            var n, i, o, r, a = this.options,
                s = this._isRootNode(this.scrollParent[0]),
                l = e.pageX,
                c = e.pageY;
            return s && this.offset.scroll || (this.offset.scroll = {
                top: this.scrollParent.scrollTop(),
                left: this.scrollParent.scrollLeft()
            }), t && (this.containment && (this.relativeContainer ? (i = this.relativeContainer.offset(), n = [this.containment[0] + i.left, this.containment[1] + i.top, this.containment[2] + i.left, this.containment[3] + i.top]) : n = this.containment, e.pageX - this.offset.click.left < n[0] && (l = n[0] + this.offset.click.left), e.pageY - this.offset.click.top < n[1] && (c = n[1] + this.offset.click.top), e.pageX - this.offset.click.left > n[2] && (l = n[2] + this.offset.click.left), e.pageY - this.offset.click.top > n[3] && (c = n[3] + this.offset.click.top)), a.grid && (o = a.grid[1] ? this.originalPageY + Math.round((c - this.originalPageY) / a.grid[1]) * a.grid[1] : this.originalPageY, c = n ? o - this.offset.click.top >= n[1] || o - this.offset.click.top > n[3] ? o : o - this.offset.click.top >= n[1] ? o - a.grid[1] : o + a.grid[1] : o, r = a.grid[0] ? this.originalPageX + Math.round((l - this.originalPageX) / a.grid[0]) * a.grid[0] : this.originalPageX, l = n ? r - this.offset.click.left >= n[0] || r - this.offset.click.left > n[2] ? r : r - this.offset.click.left >= n[0] ? r - a.grid[0] : r + a.grid[0] : r), "y" === a.axis && (l = this.originalPageX), "x" === a.axis && (c = this.originalPageY)), {
                top: c - this.offset.click.top - this.offset.relative.top - this.offset.parent.top + ("fixed" === this.cssPosition ? -this.offset.scroll.top : s ? 0 : this.offset.scroll.top),
                left: l - this.offset.click.left - this.offset.relative.left - this.offset.parent.left + ("fixed" === this.cssPosition ? -this.offset.scroll.left : s ? 0 : this.offset.scroll.left)
            }
        },
        _clear: function() {
            this.helper.removeClass("ui-draggable-dragging"), this.helper[0] === this.element[0] || this.cancelHelperRemoval || this.helper.remove(), this.helper = null, this.cancelHelperRemoval = !1, this.destroyOnClear && this.destroy()
        },
        _normalizeRightBottom: function() {
            "y" !== this.options.axis && "auto" !== this.helper.css("right") && (this.helper.width(this.helper.width()), this.helper.css("right", "auto")), "x" !== this.options.axis && "auto" !== this.helper.css("bottom") && (this.helper.height(this.helper.height()), this.helper.css("bottom", "auto"))
        },
        _trigger: function(e, t, n) {
            return n = n || this._uiHash(), y.ui.plugin.call(this, e, [t, n, this], !0), /^(drag|start|stop)/.test(e) && (this.positionAbs = this._convertPositionTo("absolute"), n.offset = this.positionAbs), y.Widget.prototype._trigger.call(this, e, t, n)
        },
        plugins: {},
        _uiHash: function() {
            return {
                helper: this.helper,
                position: this.position,
                originalPosition: this.originalPosition,
                offset: this.positionAbs
            }
        }
    }), y.ui.plugin.add("draggable", "connectToSortable", {
        start: function(t, e, n) {
            var i = y.extend({}, e, {
                item: n.element
            });
            n.sortables = [], y(n.options.connectToSortable).each(function() {
                var e = y(this).sortable("instance");
                e && !e.options.disabled && (n.sortables.push(e), e.refreshPositions(), e._trigger("activate", t, i))
            })
        },
        stop: function(t, e, n) {
            var i = y.extend({}, e, {
                item: n.element
            });
            n.cancelHelperRemoval = !1, y.each(n.sortables, function() {
                var e = this;
                e.isOver ? (e.isOver = 0, n.cancelHelperRemoval = !0, e.cancelHelperRemoval = !1, e._storedCSS = {
                    position: e.placeholder.css("position"),
                    top: e.placeholder.css("top"),
                    left: e.placeholder.css("left")
                }, e._mouseStop(t), e.options.helper = e.options._helper) : (e.cancelHelperRemoval = !0, e._trigger("deactivate", t, i))
            })
        },
        drag: function(n, i, o) {
            y.each(o.sortables, function() {
                var e = !1,
                    t = this;
                t.positionAbs = o.positionAbs, t.helperProportions = o.helperProportions, t.offset.click = o.offset.click, t._intersectsWith(t.containerCache) && (e = !0, y.each(o.sortables, function() {
                    return this.positionAbs = o.positionAbs, this.helperProportions = o.helperProportions, this.offset.click = o.offset.click, this !== t && this._intersectsWith(this.containerCache) && y.contains(t.element[0], this.element[0]) && (e = !1), e
                })), e ? (t.isOver || (t.isOver = 1, o._parent = i.helper.parent(), t.currentItem = i.helper.appendTo(t.element).data("ui-sortable-item", !0), t.options._helper = t.options.helper, t.options.helper = function() {
                    return i.helper[0]
                }, n.target = t.currentItem[0], t._mouseCapture(n, !0), t._mouseStart(n, !0, !0), t.offset.click.top = o.offset.click.top, t.offset.click.left = o.offset.click.left, t.offset.parent.left -= o.offset.parent.left - t.offset.parent.left, t.offset.parent.top -= o.offset.parent.top - t.offset.parent.top, o._trigger("toSortable", n), o.dropped = t.element, y.each(o.sortables, function() {
                    this.refreshPositions()
                }), o.currentItem = o.element, t.fromOutside = o), t.currentItem && (t._mouseDrag(n), i.position = t.position)) : t.isOver && (t.isOver = 0, t.cancelHelperRemoval = !0, t.options._revert = t.options.revert, t.options.revert = !1, t._trigger("out", n, t._uiHash(t)), t._mouseStop(n, !0), t.options.revert = t.options._revert, t.options.helper = t.options._helper, t.placeholder && t.placeholder.remove(), i.helper.appendTo(o._parent), o._refreshOffsets(n), i.position = o._generatePosition(n, !0), o._trigger("fromSortable", n), o.dropped = !1, y.each(o.sortables, function() {
                        this.refreshPositions()
                    }))
            })
        }
    }), y.ui.plugin.add("draggable", "cursor", {
        start: function(e, t, n) {
            var i = y("body"),
                o = n.options;
            i.css("cursor") && (o._cursor = i.css("cursor")), i.css("cursor", o.cursor)
        },
        stop: function(e, t, n) {
            var i = n.options;
            i._cursor && y("body").css("cursor", i._cursor)
        }
    }), y.ui.plugin.add("draggable", "opacity", {
        start: function(e, t, n) {
            var i = y(t.helper),
                o = n.options;
            i.css("opacity") && (o._opacity = i.css("opacity")), i.css("opacity", o.opacity)
        },
        stop: function(e, t, n) {
            var i = n.options;
            i._opacity && y(t.helper).css("opacity", i._opacity)
        }
    }), y.ui.plugin.add("draggable", "scroll", {
        start: function(e, t, n) {
            n.scrollParentNotHidden || (n.scrollParentNotHidden = n.helper.scrollParent(!1)), n.scrollParentNotHidden[0] !== n.document[0] && "HTML" !== n.scrollParentNotHidden[0].tagName && (n.overflowOffset = n.scrollParentNotHidden.offset())
        },
        drag: function(e, t, n) {
            var i = n.options,
                o = !1,
                r = n.scrollParentNotHidden[0],
                a = n.document[0];
            r !== a && "HTML" !== r.tagName ? (i.axis && "x" === i.axis || (n.overflowOffset.top + r.offsetHeight - e.pageY < i.scrollSensitivity ? r.scrollTop = o = r.scrollTop + i.scrollSpeed : e.pageY - n.overflowOffset.top < i.scrollSensitivity && (r.scrollTop = o = r.scrollTop - i.scrollSpeed)), i.axis && "y" === i.axis || (n.overflowOffset.left + r.offsetWidth - e.pageX < i.scrollSensitivity ? r.scrollLeft = o = r.scrollLeft + i.scrollSpeed : e.pageX - n.overflowOffset.left < i.scrollSensitivity && (r.scrollLeft = o = r.scrollLeft - i.scrollSpeed))) : (i.axis && "x" === i.axis || (e.pageY - y(a).scrollTop() < i.scrollSensitivity ? o = y(a).scrollTop(y(a).scrollTop() - i.scrollSpeed) : y(window).height() - (e.pageY - y(a).scrollTop()) < i.scrollSensitivity && (o = y(a).scrollTop(y(a).scrollTop() + i.scrollSpeed))), i.axis && "y" === i.axis || (e.pageX - y(a).scrollLeft() < i.scrollSensitivity ? o = y(a).scrollLeft(y(a).scrollLeft() - i.scrollSpeed) : y(window).width() - (e.pageX - y(a).scrollLeft()) < i.scrollSensitivity && (o = y(a).scrollLeft(y(a).scrollLeft() + i.scrollSpeed)))), !1 !== o && y.ui.ddmanager && !i.dropBehaviour && y.ui.ddmanager.prepareOffsets(n, e)
        }
    }), y.ui.plugin.add("draggable", "snap", {
        start: function(e, t, n) {
            var i = n.options;
            n.snapElements = [], y(i.snap.constructor !== String ? i.snap.items || ":data(ui-draggable)" : i.snap).each(function() {
                var e = y(this),
                    t = e.offset();
                this !== n.element[0] && n.snapElements.push({
                    item: this,
                    width: e.outerWidth(),
                    height: e.outerHeight(),
                    top: t.top,
                    left: t.left
                })
            })
        },
        drag: function(e, t, n) {
            var i, o, r, a, s, l, c, u, d, f, h = n.options,
                p = h.snapTolerance,
                m = t.offset.left,
                _ = m + n.helperProportions.width,
                g = t.offset.top,
                v = g + n.helperProportions.height;
            for (d = n.snapElements.length - 1; 0 <= d; d--) l = (s = n.snapElements[d].left - n.margins.left) + n.snapElements[d].width, u = (c = n.snapElements[d].top - n.margins.top) + n.snapElements[d].height, _ < s - p || l + p < m || v < c - p || u + p < g || !y.contains(n.snapElements[d].item.ownerDocument, n.snapElements[d].item) ? (n.snapElements[d].snapping && n.options.snap.release && n.options.snap.release.call(n.element, e, y.extend(n._uiHash(), {
                snapItem: n.snapElements[d].item
            })), n.snapElements[d].snapping = !1) : ("inner" !== h.snapMode && (i = Math.abs(c - v) <= p, o = Math.abs(u - g) <= p, r = Math.abs(s - _) <= p, a = Math.abs(l - m) <= p, i && (t.position.top = n._convertPositionTo("relative", {
                top: c - n.helperProportions.height,
                left: 0
            }).top), o && (t.position.top = n._convertPositionTo("relative", {
                top: u,
                left: 0
            }).top), r && (t.position.left = n._convertPositionTo("relative", {
                top: 0,
                left: s - n.helperProportions.width
            }).left), a && (t.position.left = n._convertPositionTo("relative", {
                top: 0,
                left: l
            }).left)), f = i || o || r || a, "outer" !== h.snapMode && (i = Math.abs(c - g) <= p, o = Math.abs(u - v) <= p, r = Math.abs(s - m) <= p, a = Math.abs(l - _) <= p, i && (t.position.top = n._convertPositionTo("relative", {
                top: c,
                left: 0
            }).top), o && (t.position.top = n._convertPositionTo("relative", {
                top: u - n.helperProportions.height,
                left: 0
            }).top), r && (t.position.left = n._convertPositionTo("relative", {
                top: 0,
                left: s
            }).left), a && (t.position.left = n._convertPositionTo("relative", {
                top: 0,
                left: l - n.helperProportions.width
            }).left)), !n.snapElements[d].snapping && (i || o || r || a || f) && n.options.snap.snap && n.options.snap.snap.call(n.element, e, y.extend(n._uiHash(), {
                snapItem: n.snapElements[d].item
            })), n.snapElements[d].snapping = i || o || r || a || f)
        }
    }), y.ui.plugin.add("draggable", "stack", {
        start: function(e, t, n) {
            var i, o = n.options,
                r = y.makeArray(y(o.stack)).sort(function(e, t) {
                    return (parseInt(y(e).css("zIndex"), 10) || 0) - (parseInt(y(t).css("zIndex"), 10) || 0)
                });
            r.length && (i = parseInt(y(r[0]).css("zIndex"), 10) || 0, y(r).each(function(e) {
                y(this).css("zIndex", i + e)
            }), this.css("zIndex", i + r.length))
        }
    }), y.ui.plugin.add("draggable", "zIndex", {
        start: function(e, t, n) {
            var i = y(t.helper),
                o = n.options;
            i.css("zIndex") && (o._zIndex = i.css("zIndex")), i.css("zIndex", o.zIndex)
        },
        stop: function(e, t, n) {
            var i = n.options;
            i._zIndex && y(t.helper).css("zIndex", i._zIndex)
        }
    }), y.ui.draggable
}), function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./core", "./widget", "./mouse", "./draggable"], e) : e(jQuery)
}(function(s) {
    return s.widget("ui.droppable", {
        version: "1.11.4",
        widgetEventPrefix: "drop",
        options: {
            accept: "*",
            activeClass: !1,
            addClasses: !0,
            greedy: !1,
            hoverClass: !1,
            scope: "default",
            tolerance: "intersect",
            activate: null,
            deactivate: null,
            drop: null,
            out: null,
            over: null
        },
        _create: function() {
            var t, e = this.options,
                n = e.accept;
            this.isover = !1, this.isout = !0, this.accept = s.isFunction(n) ? n : function(e) {
                return e.is(n)
            }, this.proportions = function(e) {
                if (!arguments.length) return t || (t = {
                        width: this.element[0].offsetWidth,
                        height: this.element[0].offsetHeight
                    });
                t = e
            }, this._addToManager(e.scope), e.addClasses && this.element.addClass("ui-droppable")
        },
        _addToManager: function(e) {
            s.ui.ddmanager.droppables[e] = s.ui.ddmanager.droppables[e] || [], s.ui.ddmanager.droppables[e].push(this)
        },
        _splice: function(e) {
            for (var t = 0; t < e.length; t++) e[t] === this && e.splice(t, 1)
        },
        _destroy: function() {
            var e = s.ui.ddmanager.droppables[this.options.scope];
            this._splice(e), this.element.removeClass("ui-droppable ui-droppable-disabled")
        },
        _setOption: function(e, t) {
            if ("accept" === e) this.accept = s.isFunction(t) ? t : function(e) {
                return e.is(t)
            };
            else if ("scope" === e) {
                var n = s.ui.ddmanager.droppables[this.options.scope];
                this._splice(n), this._addToManager(t)
            }
            this._super(e, t)
        },
        _activate: function(e) {
            var t = s.ui.ddmanager.current;
            this.options.activeClass && this.element.addClass(this.options.activeClass), t && this._trigger("activate", e, this.ui(t))
        },
        _deactivate: function(e) {
            var t = s.ui.ddmanager.current;
            this.options.activeClass && this.element.removeClass(this.options.activeClass), t && this._trigger("deactivate", e, this.ui(t))
        },
        _over: function(e) {
            var t = s.ui.ddmanager.current;
            t && (t.currentItem || t.element)[0] !== this.element[0] && this.accept.call(this.element[0], t.currentItem || t.element) && (this.options.hoverClass && this.element.addClass(this.options.hoverClass), this._trigger("over", e, this.ui(t)))
        },
        _out: function(e) {
            var t = s.ui.ddmanager.current;
            t && (t.currentItem || t.element)[0] !== this.element[0] && this.accept.call(this.element[0], t.currentItem || t.element) && (this.options.hoverClass && this.element.removeClass(this.options.hoverClass), this._trigger("out", e, this.ui(t)))
        },
        _drop: function(t, e) {
            var n = e || s.ui.ddmanager.current,
                i = !1;
            return !(!n || (n.currentItem || n.element)[0] === this.element[0]) && (this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function() {
                    var e = s(this).droppable("instance");
                    if (e.options.greedy && !e.options.disabled && e.options.scope === n.options.scope && e.accept.call(e.element[0], n.currentItem || n.element) && s.ui.intersect(n, s.extend(e, {
                            offset: e.element.offset()
                        }), e.options.tolerance, t)) return i = !0, !1
                }), !i && ( !! this.accept.call(this.element[0], n.currentItem || n.element) && (this.options.activeClass && this.element.removeClass(this.options.activeClass), this.options.hoverClass && this.element.removeClass(this.options.hoverClass), this._trigger("drop", t, this.ui(n)), this.element)))
        },
        ui: function(e) {
            return {
                draggable: e.currentItem || e.element,
                helper: e.helper,
                position: e.position,
                offset: e.positionAbs
            }
        }
    }), s.ui.intersect = function() {
        function f(e, t, n) {
            return t <= e && e < t + n
        }
        return function(e, t, n, i) {
            if (!t.offset) return !1;
            var o = (e.positionAbs || e.position.absolute).left + e.margins.left,
                r = (e.positionAbs || e.position.absolute).top + e.margins.top,
                a = o + e.helperProportions.width,
                s = r + e.helperProportions.height,
                l = t.offset.left,
                c = t.offset.top,
                u = l + t.proportions().width,
                d = c + t.proportions().height;
            switch (n) {
                case "fit":
                    return l <= o && a <= u && c <= r && s <= d;
                case "intersect":
                    return l < o + e.helperProportions.width / 2 && a - e.helperProportions.width / 2 < u && c < r + e.helperProportions.height / 2 && s - e.helperProportions.height / 2 < d;
                case "pointer":
                    return f(i.pageY, c, t.proportions().height) && f(i.pageX, l, t.proportions().width);
                case "touch":
                    return (c <= r && r <= d || c <= s && s <= d || r < c && d < s) && (l <= o && o <= u || l <= a && a <= u || o < l && u < a);
                default:
                    return !1
            }
        }
    }(), s.ui.ddmanager = {
        current: null,
        droppables: {
            "default": []
        },
        prepareOffsets: function(e, t) {
            var n, i, o = s.ui.ddmanager.droppables[e.options.scope] || [],
                r = t ? t.type : null,
                a = (e.currentItem || e.element).find(":data(ui-droppable)").addBack();
            e: for (n = 0; n < o.length; n++) if (!(o[n].options.disabled || e && !o[n].accept.call(o[n].element[0], e.currentItem || e.element))) {
                for (i = 0; i < a.length; i++) if (a[i] === o[n].element[0]) {
                    o[n].proportions().height = 0;
                    continue e
                }
                o[n].visible = "none" !== o[n].element.css("display"), o[n].visible && ("mousedown" === r && o[n]._activate.call(o[n], t), o[n].offset = o[n].element.offset(), o[n].proportions({
                    width: o[n].element[0].offsetWidth,
                    height: o[n].element[0].offsetHeight
                }))
            }
        },
        drop: function(e, t) {
            var n = !1;
            return s.each((s.ui.ddmanager.droppables[e.options.scope] || []).slice(), function() {
                this.options && (!this.options.disabled && this.visible && s.ui.intersect(e, this, this.options.tolerance, t) && (n = this._drop.call(this, t) || n), !this.options.disabled && this.visible && this.accept.call(this.element[0], e.currentItem || e.element) && (this.isout = !0, this.isover = !1, this._deactivate.call(this, t)))
            }), n
        },
        dragStart: function(e, t) {
            e.element.parentsUntil("body").bind("scroll.droppable", function() {
                e.options.refreshPositions || s.ui.ddmanager.prepareOffsets(e, t)
            })
        },
        drag: function(r, a) {
            r.options.refreshPositions && s.ui.ddmanager.prepareOffsets(r, a), s.each(s.ui.ddmanager.droppables[r.options.scope] || [], function() {
                if (!this.options.disabled && !this.greedyChild && this.visible) {
                    var e, t, n, i = s.ui.intersect(r, this, this.options.tolerance, a),
                        o = !i && this.isover ? "isout" : i && !this.isover ? "isover" : null;
                    o && (this.options.greedy && (t = this.options.scope, (n = this.element.parents(":data(ui-droppable)").filter(function() {
                        return s(this).droppable("instance").options.scope === t
                    })).length && ((e = s(n[0]).droppable("instance")).greedyChild = "isover" === o)), e && "isover" === o && (e.isover = !1, e.isout = !0, e._out.call(e, a)), this[o] = !0, this["isout" === o ? "isover" : "isout"] = !1, this["isover" === o ? "_over" : "_out"].call(this, a), e && "isout" === o && (e.isout = !1, e.isover = !0, e._over.call(e, a)))
                }
            })
        },
        dragStop: function(e, t) {
            e.element.parentsUntil("body").unbind("scroll.droppable"), e.options.refreshPositions || s.ui.ddmanager.prepareOffsets(e, t)
        }
    }, s.ui.droppable
}), function(e) {
    "function" == typeof define && define.amd ? define(["jquery"], e) : e(jQuery)
}(function(d) {
    var n, s = "ui-effects-",
        i = d;
    return d.effects = {
        effect: {}
    }, function(u, d) {
        function f(e, t, n) {
            var i = _[t.type] || {};
            return null == e ? n || !t.def ? null : t.def : (e = i.floor ? ~~e : parseFloat(e), isNaN(e) ? t.def : i.mod ? (e + i.mod) % i.mod : e < 0 ? 0 : i.max < e ? i.max : e)
        }
        function s(a) {
            var s = p(),
                l = s._rgba = [];
            return a = a.toLowerCase(), v(t, function(e, t) {
                var n, i = t.re.exec(a),
                    o = i && t.parse(i),
                    r = t.space || "rgba";
                if (o) return n = s[r](o), s[m[r].cache] = n[m[r].cache], l = s._rgba = n._rgba, !1
            }), l.length ? ("0,0,0,0" === l.join() && u.extend(l, c.transparent), s) : c[a]
        }
        function l(e, t, n) {
            return 6 * (n = (n + 1) % 1) < 1 ? e + (t - e) * n * 6 : 2 * n < 1 ? t : 3 * n < 2 ? e + (t - e) * (2 / 3 - n) * 6 : e
        }
        var c, e = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
            h = /^([\-+])=\s*(\d+\.?\d*)/,
            t = [{
                re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
                parse: function(e) {
                    return [e[1], e[2], e[3], e[4]]
                }
            }, {
                re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
                parse: function(e) {
                    return [2.55 * e[1], 2.55 * e[2], 2.55 * e[3], e[4]]
                }
            }, {
                re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
                parse: function(e) {
                    return [parseInt(e[1], 16), parseInt(e[2], 16), parseInt(e[3], 16)]
                }
            }, {
                re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
                parse: function(e) {
                    return [parseInt(e[1] + e[1], 16), parseInt(e[2] + e[2], 16), parseInt(e[3] + e[3], 16)]
                }
            }, {
                re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
                space: "hsla",
                parse: function(e) {
                    return [e[1], e[2] / 100, e[3] / 100, e[4]]
                }
            }],
            p = u.Color = function(e, t, n, i) {
                return new u.Color.fn.parse(e, t, n, i)
            },
            m = {
                rgba: {
                    props: {
                        red: {
                            idx: 0,
                            type: "byte"
                        },
                        green: {
                            idx: 1,
                            type: "byte"
                        },
                        blue: {
                            idx: 2,
                            type: "byte"
                        }
                    }
                },
                hsla: {
                    props: {
                        hue: {
                            idx: 0,
                            type: "degrees"
                        },
                        saturation: {
                            idx: 1,
                            type: "percent"
                        },
                        lightness: {
                            idx: 2,
                            type: "percent"
                        }
                    }
                }
            },
            _ = {
                "byte": {
                    floor: !0,
                    max: 255
                },
                percent: {
                    max: 1
                },
                degrees: {
                    mod: 360,
                    floor: !0
                }
            },
            g = p.support = {},
            n = u("<p>")[0],
            v = u.each;
        n.style.cssText = "background-color:rgba(1,1,1,.5)", g.rgba = -1 < n.style.backgroundColor.indexOf("rgba"), v(m, function(e, t) {
            t.cache = "_" + e, t.props.alpha = {
                idx: 3,
                type: "percent",
                def: 1
            }
        }), p.fn = u.extend(p.prototype, {
            parse: function(o, e, t, n) {
                if (o === d) return this._rgba = [null, null, null, null], this;
                (o.jquery || o.nodeType) && (o = u(o).css(e), e = d);
                var r = this,
                    i = u.type(o),
                    a = this._rgba = [];
                return e !== d && (o = [o, e, t, n], i = "array"), "string" === i ? this.parse(s(o) || c._default) : "array" === i ? (v(m.rgba.props, function(e, t) {
                    a[t.idx] = f(o[t.idx], t)
                }), this) : "object" === i ? (v(m, o instanceof p ?
                    function(e, t) {
                        o[t.cache] && (r[t.cache] = o[t.cache].slice())
                    } : function(e, n) {
                        var i = n.cache;
                        v(n.props, function(e, t) {
                            if (!r[i] && n.to) {
                                if ("alpha" === e || null == o[e]) return;
                                r[i] = n.to(r._rgba)
                            }
                            r[i][t.idx] = f(o[e], t, !0)
                        }), r[i] && u.inArray(null, r[i].slice(0, 3)) < 0 && (r[i][3] = 1, n.from && (r._rgba = n.from(r[i])))
                    }), this) : void 0
            },
            is: function(e) {
                var o = p(e),
                    r = !0,
                    a = this;
                return v(m, function(e, t) {
                    var n, i = o[t.cache];
                    return i && (n = a[t.cache] || t.to && t.to(a._rgba) || [], v(t.props, function(e, t) {
                        if (null != i[t.idx]) return r = i[t.idx] === n[t.idx]
                    })), r
                }), r
            },
            _space: function() {
                var n = [],
                    i = this;
                return v(m, function(e, t) {
                    i[t.cache] && n.push(e)
                }), n.pop()
            },
            transition: function(e, a) {
                var s = p(e),
                    t = s._space(),
                    n = m[t],
                    i = 0 === this.alpha() ? p("transparent") : this,
                    l = i[n.cache] || n.to(i._rgba),
                    c = l.slice();
                return s = s[n.cache], v(n.props, function(e, t) {
                    var n = t.idx,
                        i = l[n],
                        o = s[n],
                        r = _[t.type] || {};
                    null !== o && (null === i ? c[n] = o : (r.mod && (o - i > r.mod / 2 ? i += r.mod : i - o > r.mod / 2 && (i -= r.mod)), c[n] = f((o - i) * a + i, t)))
                }), this[t](c)
            },
            blend: function(e) {
                if (1 === this._rgba[3]) return this;
                var t = this._rgba.slice(),
                    n = t.pop(),
                    i = p(e)._rgba;
                return p(u.map(t, function(e, t) {
                    return (1 - n) * i[t] + n * e
                }))
            },
            toRgbaString: function() {
                var e = "rgba(",
                    t = u.map(this._rgba, function(e, t) {
                        return null == e ? 2 < t ? 1 : 0 : e
                    });
                return 1 === t[3] && (t.pop(), e = "rgb("), e + t.join() + ")"
            },
            toHslaString: function() {
                var e = "hsla(",
                    t = u.map(this.hsla(), function(e, t) {
                        return null == e && (e = 2 < t ? 1 : 0), t && t < 3 && (e = Math.round(100 * e) + "%"), e
                    });
                return 1 === t[3] && (t.pop(), e = "hsl("), e + t.join() + ")"
            },
            toHexString: function(e) {
                var t = this._rgba.slice(),
                    n = t.pop();
                return e && t.push(~~ (255 * n)), "#" + u.map(t, function(e) {
                    return 1 === (e = (e || 0).toString(16)).length ? "0" + e : e
                }).join("")
            },
            toString: function() {
                return 0 === this._rgba[3] ? "transparent" : this.toRgbaString()
            }
        }), p.fn.parse.prototype = p.fn, m.hsla.to = function(e) {
            if (null == e[0] || null == e[1] || null == e[2]) return [null, null, null, e[3]];
            var t, n, i = e[0] / 255,
                o = e[1] / 255,
                r = e[2] / 255,
                a = e[3],
                s = Math.max(i, o, r),
                l = Math.min(i, o, r),
                c = s - l,
                u = s + l,
                d = .5 * u;
            return t = l === s ? 0 : i === s ? 60 * (o - r) / c + 360 : o === s ? 60 * (r - i) / c + 120 : 60 * (i - o) / c + 240, n = 0 === c ? 0 : d <= .5 ? c / u : c / (2 - u), [Math.round(t) % 360, n, d, null == a ? 1 : a]
        }, m.hsla.from = function(e) {
            if (null == e[0] || null == e[1] || null == e[2]) return [null, null, null, e[3]];
            var t = e[0] / 360,
                n = e[1],
                i = e[2],
                o = e[3],
                r = i <= .5 ? i * (1 + n) : i + n - i * n,
                a = 2 * i - r;
            return [Math.round(255 * l(a, r, t + 1 / 3)), Math.round(255 * l(a, r, t)), Math.round(255 * l(a, r, t - 1 / 3)), o]
        }, v(m, function(l, e) {
            var n = e.props,
                a = e.cache,
                s = e.to,
                c = e.from;
            p.fn[l] = function(e) {
                if (s && !this[a] && (this[a] = s(this._rgba)), e === d) return this[a].slice();
                var t, i = u.type(e),
                    o = "array" === i || "object" === i ? e : arguments,
                    r = this[a].slice();
                return v(n, function(e, t) {
                    var n = o["object" === i ? e : t.idx];
                    null == n && (n = r[t.idx]), r[t.idx] = f(n, t)
                }), c ? ((t = p(c(r)))[a] = r, t) : p(r)
            }, v(n, function(a, s) {
                p.fn[a] || (p.fn[a] = function(e) {
                    var t, n = u.type(e),
                        i = "alpha" === a ? this._hsla ? "hsla" : "rgba" : l,
                        o = this[i](),
                        r = o[s.idx];
                    return "undefined" === n ? r : ("function" === n && (e = e.call(this, r), n = u.type(e)), null == e && s.empty ? this : ("string" === n && (t = h.exec(e)) && (e = r + parseFloat(t[2]) * ("+" === t[1] ? 1 : -1)), o[s.idx] = e, this[i](o)))
                })
            })
        }), p.hook = function(e) {
            var t = e.split(" ");
            v(t, function(e, a) {
                u.cssHooks[a] = {
                    set: function(e, t) {
                        var n, i, o = "";
                        if ("transparent" !== t && ("string" !== u.type(t) || (n = s(t)))) {
                            if (t = p(n || t), !g.rgba && 1 !== t._rgba[3]) {
                                for (i = "backgroundColor" === a ? e.parentNode : e;
                                     ("" === o || "transparent" === o) && i && i.style;) try {
                                    o = u.css(i, "backgroundColor"), i = i.parentNode
                                } catch (r) {}
                                t = t.blend(o && "transparent" !== o ? o : "_default")
                            }
                            t = t.toRgbaString()
                        }
                        try {
                            e.style[a] = t
                        } catch (r) {}
                    }
                }, u.fx.step[a] = function(e) {
                    e.colorInit || (e.start = p(e.elem, a), e.end = p(e.end), e.colorInit = !0), u.cssHooks[a].set(e.elem, e.start.transition(e.end, e.pos))
                }
            })
        }, p.hook(e), u.cssHooks.borderColor = {
            expand: function(n) {
                var i = {};
                return v(["Top", "Right", "Bottom", "Left"], function(e, t) {
                    i["border" + t + "Color"] = n
                }), i
            }
        }, c = u.Color.names = {
            aqua: "#00ffff",
            black: "#000000",
            blue: "#0000ff",
            fuchsia: "#ff00ff",
            gray: "#808080",
            green: "#008000",
            lime: "#00ff00",
            maroon: "#800000",
            navy: "#000080",
            olive: "#808000",
            purple: "#800080",
            red: "#ff0000",
            silver: "#c0c0c0",
            teal: "#008080",
            white: "#ffffff",
            yellow: "#ffff00",
            transparent: [null, null, null, 0],
            _default: "#ffffff"
        }
    }(i), function() {
        function a(e) {
            var t, n, i = e.ownerDocument.defaultView ? e.ownerDocument.defaultView.getComputedStyle(e, null) : e.currentStyle,
                o = {};
            if (i && i.length && i[0] && i[i[0]]) for (n = i.length; n--;)"string" == typeof i[t = i[n]] && (o[d.camelCase(t)] = i[t]);
            else for (t in i)"string" == typeof i[t] && (o[t] = i[t]);
            return o
        }
        function s(e, t) {
            var n, i, o = {};
            for (n in t) i = t[n], e[n] !== i && (u[n] || !d.fx.step[n] && isNaN(parseFloat(i)) || (o[n] = i));
            return o
        }
        var r, o, l, c = ["add", "remove", "toggle"],
            u = {
                border: 1,
                borderBottom: 1,
                borderColor: 1,
                borderLeft: 1,
                borderRight: 1,
                borderTop: 1,
                borderWidth: 1,
                margin: 1,
                padding: 1
            };
        d.each(["borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle"], function(e, t) {
            d.fx.step[t] = function(e) {
                ("none" !== e.end && !e.setAttr || 1 === e.pos && !e.setAttr) && (i.style(e.elem, t, e.end), e.setAttr = !0)
            }
        }), d.fn.addBack || (d.fn.addBack = function(e) {
            return this.add(null == e ? this.prevObject : this.prevObject.filter(e))
        }), d.effects.animateClass = function(o, e, t, n) {
            var r = d.speed(e, t, n);
            return this.queue(function() {
                var e, n = d(this),
                    t = n.attr("class") || "",
                    i = r.children ? n.find("*").addBack() : n;
                i = i.map(function() {
                    return {
                        el: d(this),
                        start: a(this)
                    }
                }), (e = function() {
                    d.each(c, function(e, t) {
                        o[t] && n[t + "Class"](o[t])
                    })
                })(), i = i.map(function() {
                    return this.end = a(this.el[0]), this.diff = s(this.start, this.end), this
                }), n.attr("class", t), i = i.map(function() {
                    var e = this,
                        t = d.Deferred(),
                        n = d.extend({}, r, {
                            queue: !1,
                            complete: function() {
                                t.resolve(e)
                            }
                        });
                    return this.el.animate(this.diff, n), t.promise()
                }), d.when.apply(d, i.get()).done(function() {
                    e(), d.each(arguments, function() {
                        var t = this.el;
                        d.each(this.diff, function(e) {
                            t.css(e, "")
                        })
                    }), r.complete.call(n[0])
                })
            })
        }, d.fn.extend({
            addClass: (l = d.fn.addClass, function(e, t, n, i) {
                return t ? d.effects.animateClass.call(this, {
                    add: e
                }, t, n, i) : l.apply(this, arguments)
            }),
            removeClass: (o = d.fn.removeClass, function(e, t, n, i) {
                return 1 < arguments.length ? d.effects.animateClass.call(this, {
                    remove: e
                }, t, n, i) : o.apply(this, arguments)
            }),
            toggleClass: (r = d.fn.toggleClass, function(e, t, n, i, o) {
                return "boolean" == typeof t || t === undefined ? n ? d.effects.animateClass.call(this, t ? {
                    add: e
                } : {
                    remove: e
                }, n, i, o) : r.apply(this, arguments) : d.effects.animateClass.call(this, {
                    toggle: e
                }, t, n, i)
            }),
            switchClass: function(e, t, n, i, o) {
                return d.effects.animateClass.call(this, {
                    add: t,
                    remove: e
                }, n, i, o)
            }
        })
    }(), function() {
        function i(e, t, n, i) {
            return d.isPlainObject(e) && (e = (t = e).effect), e = {
                effect: e
            }, null == t && (t = {}), d.isFunction(t) && (i = t, n = null, t = {}), ("number" == typeof t || d.fx.speeds[t]) && (i = n, n = t, t = {}), d.isFunction(n) && (i = n, n = null), t && d.extend(e, t), n = n || t.duration, e.duration = d.fx.off ? 0 : "number" == typeof n ? n : n in d.fx.speeds ? d.fx.speeds[n] : d.fx.speeds._default, e.complete = i || t.complete, e
        }
        function n(e) {
            return !(e && "number" != typeof e && !d.fx.speeds[e]) || ("string" == typeof e && !d.effects.effect[e] || ( !! d.isFunction(e) || "object" == typeof e && !e.effect))
        }
        var o, r, a;
        d.extend(d.effects, {
            version: "1.11.4",
            save: function(e, t) {
                for (var n = 0; n < t.length; n++) null !== t[n] && e.data(s + t[n], e[0].style[t[n]])
            },
            restore: function(e, t) {
                var n, i;
                for (i = 0; i < t.length; i++) null !== t[i] && ((n = e.data(s + t[i])) === undefined && (n = ""), e.css(t[i], n))
            },
            setMode: function(e, t) {
                return "toggle" === t && (t = e.is(":hidden") ? "show" : "hide"), t
            },
            getBaseline: function(e, t) {
                var n, i;
                switch (e[0]) {
                    case "top":
                        n = 0;
                        break;
                    case "middle":
                        n = .5;
                        break;
                    case "bottom":
                        n = 1;
                        break;
                    default:
                        n = e[0] / t.height
                }
                switch (e[1]) {
                    case "left":
                        i = 0;
                        break;
                    case "center":
                        i = .5;
                        break;
                    case "right":
                        i = 1;
                        break;
                    default:
                        i = e[1] / t.width
                }
                return {
                    x: i,
                    y: n
                }
            },
            createWrapper: function(n) {
                if (n.parent().is(".ui-effects-wrapper")) return n.parent();
                var i = {
                        width: n.outerWidth(!0),
                        height: n.outerHeight(!0),
                        "float": n.css("float")
                    },
                    e = d("<div></div>").addClass("ui-effects-wrapper").css({
                        fontSize: "100%",
                        background: "transparent",
                        border: "none",
                        margin: 0,
                        padding: 0
                    }),
                    t = {
                        width: n.width(),
                        height: n.height()
                    },
                    o = document.activeElement;
                try {
                    o.id
                } catch (r) {
                    o = document.body
                }
                return n.wrap(e), (n[0] === o || d.contains(n[0], o)) && d(o).focus(), e = n.parent(), "static" === n.css("position") ? (e.css({
                    position: "relative"
                }), n.css({
                    position: "relative"
                })) : (d.extend(i, {
                    position: n.css("position"),
                    zIndex: n.css("z-index")
                }), d.each(["top", "left", "bottom", "right"], function(e, t) {
                    i[t] = n.css(t), isNaN(parseInt(i[t], 10)) && (i[t] = "auto")
                }), n.css({
                    position: "relative",
                    top: 0,
                    left: 0,
                    right: "auto",
                    bottom: "auto"
                })), n.css(t), e.css(i).show()
            },
            removeWrapper: function(e) {
                var t = document.activeElement;
                return e.parent().is(".ui-effects-wrapper") && (e.parent().replaceWith(e), (e[0] === t || d.contains(e[0], t)) && d(t).focus()), e
            },
            setTransition: function(i, e, o, r) {
                return r = r || {}, d.each(e, function(e, t) {
                    var n = i.cssUnit(t);
                    0 < n[0] && (r[t] = n[0] * o + n[1])
                }), r
            }
        }), d.fn.extend({
            effect: function() {
                function e(e) {
                    function t() {
                        d.isFunction(i) && i.call(n[0]), d.isFunction(e) && e()
                    }
                    var n = d(this),
                        i = r.complete,
                        o = r.mode;
                    (n.is(":hidden") ? "hide" === o : "show" === o) ? (n[o](), t()) : a.call(n[0], r, t)
                }
                var r = i.apply(this, arguments),
                    t = r.mode,
                    n = r.queue,
                    a = d.effects.effect[r.effect];
                return d.fx.off || !a ? t ? this[t](r.duration, r.complete) : this.each(function() {
                    r.complete && r.complete.call(this)
                }) : !1 === n ? this.each(e) : this.queue(n || "fx", e)
            },
            show: (a = d.fn.show, function(e) {
                if (n(e)) return a.apply(this, arguments);
                var t = i.apply(this, arguments);
                return t.mode = "show", this.effect.call(this, t)
            }),
            hide: (r = d.fn.hide, function(e) {
                if (n(e)) return r.apply(this, arguments);
                var t = i.apply(this, arguments);
                return t.mode = "hide", this.effect.call(this, t)
            }),
            toggle: (o = d.fn.toggle, function(e) {
                if (n(e) || "boolean" == typeof e) return o.apply(this, arguments);
                var t = i.apply(this, arguments);
                return t.mode = "toggle", this.effect.call(this, t)
            }),
            cssUnit: function(e) {
                var n = this.css(e),
                    i = [];
                return d.each(["em", "px", "%", "pt"], function(e, t) {
                    0 < n.indexOf(t) && (i = [parseFloat(n), t])
                }), i
            }
        })
    }(), n = {}, d.each(["Quad", "Cubic", "Quart", "Quint", "Expo"], function(t, e) {
        n[e] = function(e) {
            return Math.pow(e, t + 2)
        }
    }), d.extend(n, {
        Sine: function(e) {
            return 1 - Math.cos(e * Math.PI / 2)
        },
        Circ: function(e) {
            return 1 - Math.sqrt(1 - e * e)
        },
        Elastic: function(e) {
            return 0 === e || 1 === e ? e : -Math.pow(2, 8 * (e - 1)) * Math.sin((80 * (e - 1) - 7.5) * Math.PI / 15)
        },
        Back: function(e) {
            return e * e * (3 * e - 2)
        },
        Bounce: function(e) {
            for (var t, n = 4; e < ((t = Math.pow(2, --n)) - 1) / 11;);
            return 1 / Math.pow(4, 3 - n) - 7.5625 * Math.pow((3 * t - 2) / 22 - e, 2)
        }
    }), d.each(n, function(e, t) {
        d.easing["easeIn" + e] = t, d.easing["easeOut" + e] = function(e) {
            return 1 - t(1 - e)
        }, d.easing["easeInOut" + e] = function(e) {
            return e < .5 ? t(2 * e) / 2 : 1 - t(-2 * e + 2) / 2
        }
    }), d.effects
}), function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./effect"], e) : e(jQuery)
}(function(g) {
    return g.effects.effect.blind = function(e, t) {
        var n, i, o, r = g(this),
            a = /up|down|vertical/,
            s = /up|left|vertical|horizontal/,
            l = ["position", "top", "bottom", "left", "right", "height", "width"],
            c = g.effects.setMode(r, e.mode || "hide"),
            u = e.direction || "up",
            d = a.test(u),
            f = d ? "height" : "width",
            h = d ? "top" : "left",
            p = s.test(u),
            m = {},
            _ = "show" === c;
        r.parent().is(".ui-effects-wrapper") ? g.effects.save(r.parent(), l) : g.effects.save(r, l), r.show(), i = (n = g.effects.createWrapper(r).css({
            overflow: "hidden"
        }))[f](), o = parseFloat(n.css(h)) || 0, m[f] = _ ? i : 0, p || (r.css(d ? "bottom" : "right", 0).css(d ? "top" : "left", "auto").css({
            position: "absolute"
        }), m[h] = _ ? o : i + o), _ && (n.css(f, 0), p || n.css(h, o + i)), n.animate(m, {
            duration: e.duration,
            easing: e.easing,
            queue: !1,
            complete: function() {
                "hide" === c && r.hide(), g.effects.restore(r, l), g.effects.removeWrapper(r), t()
            }
        })
    }
}), function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./effect"], e) : e(jQuery)
}(function(b) {
    return b.effects.effect.bounce = function(e, t) {
        var n, i, o, r = b(this),
            a = ["position", "top", "bottom", "left", "right", "height", "width"],
            s = b.effects.setMode(r, e.mode || "effect"),
            l = "hide" === s,
            c = "show" === s,
            u = e.direction || "up",
            d = e.distance,
            f = e.times || 5,
            h = 2 * f + (c || l ? 1 : 0),
            p = e.duration / h,
            m = e.easing,
            _ = "up" === u || "down" === u ? "top" : "left",
            g = "up" === u || "left" === u,
            v = r.queue(),
            y = v.length;
        for ((c || l) && a.push("opacity"), b.effects.save(r, a), r.show(), b.effects.createWrapper(r), d || (d = r["top" === _ ? "outerHeight" : "outerWidth"]() / 3), c && ((o = {
            opacity: 1
        })[_] = 0, r.css("opacity", 0).css(_, g ? 2 * -d : 2 * d).animate(o, p, m)), l && (d /= Math.pow(2, f - 1)), n = (o = {})[_] = 0; n < f; n++)(i = {})[_] = (g ? "-=" : "+=") + d, r.animate(i, p, m).animate(o, p, m), d = l ? 2 * d : d / 2;
        l && ((i = {
            opacity: 0
        })[_] = (g ? "-=" : "+=") + d, r.animate(i, p, m)), r.queue(function() {
            l && r.hide(), b.effects.restore(r, a), b.effects.removeWrapper(r), t()
        }), 1 < y && v.splice.apply(v, [1, 0].concat(v.splice(y, h + 1))), r.dequeue()
    }
}), function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./effect"], e) : e(jQuery)
}(function(f) {
    return f.effects.effect.clip = function(e, t) {
        var n, i, o, r = f(this),
            a = ["position", "top", "bottom", "left", "right", "height", "width"],
            s = "show" === f.effects.setMode(r, e.mode || "hide"),
            l = "vertical" === (e.direction || "vertical"),
            c = l ? "height" : "width",
            u = l ? "top" : "left",
            d = {};
        f.effects.save(r, a), r.show(), n = f.effects.createWrapper(r).css({
            overflow: "hidden"
        }), o = (i = "IMG" === r[0].tagName ? n : r)[c](), s && (i.css(c, 0), i.css(u, o / 2)), d[c] = s ? o : 0, d[u] = s ? 0 : o / 2, i.animate(d, {
            queue: !1,
            duration: e.duration,
            easing: e.easing,
            complete: function() {
                s || r.hide(), f.effects.restore(r, a), f.effects.removeWrapper(r), t()
            }
        })
    }
}), function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./effect"], e) : e(jQuery)
}(function(d) {
    return d.effects.effect.drop = function(e, t) {
        var n, i = d(this),
            o = ["position", "top", "bottom", "left", "right", "opacity", "height", "width"],
            r = d.effects.setMode(i, e.mode || "hide"),
            a = "show" === r,
            s = e.direction || "left",
            l = "up" === s || "down" === s ? "top" : "left",
            c = "up" === s || "left" === s ? "pos" : "neg",
            u = {
                opacity: a ? 1 : 0
            };
        d.effects.save(i, o), i.show(), d.effects.createWrapper(i), n = e.distance || i["top" === l ? "outerHeight" : "outerWidth"](!0) / 2, a && i.css("opacity", 0).css(l, "pos" === c ? -n : n), u[l] = (a ? "pos" === c ? "+=" : "-=" : "pos" === c ? "-=" : "+=") + n, i.animate(u, {
            queue: !1,
            duration: e.duration,
            easing: e.easing,
            complete: function() {
                "hide" === r && i.hide(), d.effects.restore(i, o), d.effects.removeWrapper(i), t()
            }
        })
    }
}), function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./effect"], e) : e(jQuery)
}(function(v) {
    return v.effects.effect.explode = function(e, t) {
        function n() {
            g.push(this), g.length === u * d && i()
        }
        function i() {
            f.css({
                visibility: "visible"
            }), v(g).remove(), h || f.hide(), t()
        }
        var o, r, a, s, l, c, u = e.pieces ? Math.round(Math.sqrt(e.pieces)) : 3,
            d = u,
            f = v(this),
            h = "show" === v.effects.setMode(f, e.mode || "hide"),
            p = f.show().css("visibility", "hidden").offset(),
            m = Math.ceil(f.outerWidth() / d),
            _ = Math.ceil(f.outerHeight() / u),
            g = [];
        for (o = 0; o < u; o++) for (s = p.top + o * _, c = o - (u - 1) / 2, r = 0; r < d; r++) a = p.left + r * m, l = r - (d - 1) / 2, f.clone().appendTo("body").wrap("<div></div>").css({
            position: "absolute",
            visibility: "visible",
            left: -r * m,
            top: -o * _
        }).parent().addClass("ui-effects-explode").css({
            position: "absolute",
            overflow: "hidden",
            width: m,
            height: _,
            left: a + (h ? l * m : 0),
            top: s + (h ? c * _ : 0),
            opacity: h ? 0 : 1
        }).animate({
            left: a + (h ? 0 : l * m),
            top: s + (h ? 0 : c * _),
            opacity: h ? 1 : 0
        }, e.duration || 500, e.easing, n)
    }
}), function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./effect"], e) : e(jQuery)
}(function(o) {
    return o.effects.effect.fade = function(e, t) {
        var n = o(this),
            i = o.effects.setMode(n, e.mode || "toggle");
        n.animate({
            opacity: i
        }, {
            queue: !1,
            duration: e.duration,
            easing: e.easing,
            complete: t
        })
    }
}), function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./effect"], e) : e(jQuery)
}(function(g) {
    return g.effects.effect.fold = function(e, t) {
        var n, i, o = g(this),
            r = ["position", "top", "bottom", "left", "right", "height", "width"],
            a = g.effects.setMode(o, e.mode || "hide"),
            s = "show" === a,
            l = "hide" === a,
            c = e.size || 15,
            u = /([0-9]+)%/.exec(c),
            d = !! e.horizFirst,
            f = s !== d,
            h = f ? ["width", "height"] : ["height", "width"],
            p = e.duration / 2,
            m = {},
            _ = {};
        g.effects.save(o, r), o.show(), n = g.effects.createWrapper(o).css({
            overflow: "hidden"
        }), i = f ? [n.width(), n.height()] : [n.height(), n.width()], u && (c = parseInt(u[1], 10) / 100 * i[l ? 0 : 1]), s && n.css(d ? {
            height: 0,
            width: c
        } : {
            height: c,
            width: 0
        }), m[h[0]] = s ? i[0] : c, _[h[1]] = s ? i[1] : 0, n.animate(m, p, e.easing).animate(_, p, e.easing, function() {
            l && o.hide(), g.effects.restore(o, r), g.effects.removeWrapper(o), t()
        })
    }
}), function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./effect"], e) : e(jQuery)
}(function(a) {
    return a.effects.effect.highlight = function(e, t) {
        var n = a(this),
            i = ["backgroundImage", "backgroundColor", "opacity"],
            o = a.effects.setMode(n, e.mode || "show"),
            r = {
                backgroundColor: n.css("backgroundColor")
            };
        "hide" === o && (r.opacity = 0), a.effects.save(n, i), n.show().css({
            backgroundImage: "none",
            backgroundColor: e.color || "#ffff99"
        }).animate(r, {
            queue: !1,
            duration: e.duration,
            easing: e.easing,
            complete: function() {
                "hide" === o && n.hide(), a.effects.restore(n, i), t()
            }
        })
    }
}), function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./effect"], e) : e(jQuery)
}(function(h) {
    return h.effects.effect.pulsate = function(e, t) {
        var n, i = h(this),
            o = h.effects.setMode(i, e.mode || "show"),
            r = "show" === o,
            a = "hide" === o,
            s = r || "hide" === o,
            l = 2 * (e.times || 5) + (s ? 1 : 0),
            c = e.duration / l,
            u = 0,
            d = i.queue(),
            f = d.length;
        for (!r && i.is(":visible") || (i.css("opacity", 0).show(), u = 1), n = 1; n < l; n++) i.animate({
            opacity: u
        }, c, e.easing), u = 1 - u;
        i.animate({
            opacity: u
        }, c, e.easing), i.queue(function() {
            a && i.hide(), t()
        }), 1 < f && d.splice.apply(d, [1, 0].concat(d.splice(f, l + 1))), i.dequeue()
    }
}), function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./effect", "./effect-size"], e) : e(jQuery)
}(function(u) {
    return u.effects.effect.scale = function(e, t) {
        var n = u(this),
            i = u.extend(!0, {}, e),
            o = u.effects.setMode(n, e.mode || "effect"),
            r = parseInt(e.percent, 10) || (0 === parseInt(e.percent, 10) ? 0 : "hide" === o ? 0 : 100),
            a = e.direction || "both",
            s = e.origin,
            l = {
                height: n.height(),
                width: n.width(),
                outerHeight: n.outerHeight(),
                outerWidth: n.outerWidth()
            },
            c = {
                y: "horizontal" !== a ? r / 100 : 1,
                x: "vertical" !== a ? r / 100 : 1
            };
        i.effect = "size", i.queue = !1, i.complete = t, "effect" !== o && (i.origin = s || ["middle", "center"], i.restore = !0), i.from = e.from || ("show" === o ? {
                height: 0,
                width: 0,
                outerHeight: 0,
                outerWidth: 0
            } : l), i.to = {
            height: l.height * c.y,
            width: l.width * c.x,
            outerHeight: l.outerHeight * c.y,
            outerWidth: l.outerWidth * c.x
        }, i.fade && ("show" === o && (i.from.opacity = 0, i.to.opacity = 1), "hide" === o && (i.from.opacity = 1, i.to.opacity = 0)), n.effect(i)
    }
}), function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./effect"], e) : e(jQuery)
}(function(v) {
    return v.effects.effect.shake = function(e, t) {
        var n, i = v(this),
            o = ["position", "top", "bottom", "left", "right", "height", "width"],
            r = v.effects.setMode(i, e.mode || "effect"),
            a = e.direction || "left",
            s = e.distance || 20,
            l = e.times || 3,
            c = 2 * l + 1,
            u = Math.round(e.duration / c),
            d = "up" === a || "down" === a ? "top" : "left",
            f = "up" === a || "left" === a,
            h = {},
            p = {},
            m = {},
            _ = i.queue(),
            g = _.length;
        for (v.effects.save(i, o), i.show(), v.effects.createWrapper(i), h[d] = (f ? "-=" : "+=") + s, p[d] = (f ? "+=" : "-=") + 2 * s, m[d] = (f ? "-=" : "+=") + 2 * s, i.animate(h, u, e.easing), n = 1; n < l; n++) i.animate(p, u, e.easing).animate(m, u, e.easing);
        i.animate(p, u, e.easing).animate(h, u / 2, e.easing).queue(function() {
            "hide" === r && i.hide(), v.effects.restore(i, o), v.effects.removeWrapper(i), t()
        }), 1 < g && _.splice.apply(_, [1, 0].concat(_.splice(g, c + 1))), i.dequeue()
    }
}), function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./effect"], e) : e(jQuery)
}(function(d) {
    return d.effects.effect.slide = function(e, t) {
        var n, i = d(this),
            o = ["position", "top", "bottom", "left", "right", "width", "height"],
            r = d.effects.setMode(i, e.mode || "show"),
            a = "show" === r,
            s = e.direction || "left",
            l = "up" === s || "down" === s ? "top" : "left",
            c = "up" === s || "left" === s,
            u = {};
        d.effects.save(i, o), i.show(), n = e.distance || i["top" === l ? "outerHeight" : "outerWidth"](!0), d.effects.createWrapper(i).css({
            overflow: "hidden"
        }), a && i.css(l, c ? isNaN(n) ? "-" + n : -n : n), u[l] = (a ? c ? "+=" : "-=" : c ? "-=" : "+=") + n, i.animate(u, {
            queue: !1,
            duration: e.duration,
            easing: e.easing,
            complete: function() {
                "hide" === r && i.hide(), d.effects.restore(i, o), d.effects.removeWrapper(i), t()
            }
        })
    }
}), function(e) {
    "function" == typeof define && define.amd ? define(["jquery", "./effect"], e) : e(jQuery)
}(function(f) {
    return f.effects.effect.transfer = function(e, t) {
        var n = f(this),
            i = f(e.to),
            o = "fixed" === i.css("position"),
            r = f("body"),
            a = o ? r.scrollTop() : 0,
            s = o ? r.scrollLeft() : 0,
            l = i.offset(),
            c = {
                top: l.top - a,
                left: l.left - s,
                height: i.innerHeight(),
                width: i.innerWidth()
            },
            u = n.offset(),
            d = f("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(e.className).css({
                top: u.top - a,
                left: u.left - s,
                height: n.innerHeight(),
                width: n.innerWidth(),
                position: o ? "fixed" : "absolute"
            }).animate(c, e.duration, e.easing, function() {
                d.remove(), t()
            })
    }
}), function() {}.call(this), function(l, c) {
    "use strict";
    var u;
    l.rails !== c && l.error("jquery-ujs has already been loaded!");
    var e = l(document);
    l.rails = u = {
        linkClickSelector: "a[data-confirm], a[data-method], a[data-remote], a[data-disable-with], a[data-disable]",
        buttonClickSelector: "button[data-remote]:not(form button), button[data-confirm]:not(form button)",
        inputChangeSelector: "select[data-remote], input[data-remote], textarea[data-remote]",
        formSubmitSelector: "form",
        formInputClickSelector: "form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])",
        disableSelector: "input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled",
        enableSelector: "input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled",
        requiredInputSelector: "input[name][required]:not([disabled]),textarea[name][required]:not([disabled])",
        fileInputSelector: "input[type=file]",
        linkDisableSelector: "a[data-disable-with], a[data-disable]",
        buttonDisableSelector: "button[data-remote][data-disable-with], button[data-remote][data-disable]",
        csrfToken: function() {
            return l("meta[name=csrf-token]").attr("content")
        },
        csrfParam: function() {
            return l("meta[name=csrf-param]").attr("content")
        },
        CSRFProtection: function(e) {
            var t = u.csrfToken();
            t && e.setRequestHeader("X-CSRF-Token", t)
        },
        refreshCSRFTokens: function() {
            l('form input[name="' + u.csrfParam() + '"]').val(u.csrfToken())
        },
        fire: function(e, t, n) {
            var i = l.Event(t);
            return e.trigger(i, n), !1 !== i.result
        },
        confirm: function(e) {
            return confirm(e)
        },
        ajax: function(e) {
            return l.ajax(e)
        },
        href: function(e) {
            return e[0].href
        },
        isRemote: function(e) {
            return e.data("remote") !== c && !1 !== e.data("remote")
        },
        handleRemote: function(i) {
            var e, t, n, o, r, a;
            if (u.fire(i, "ajax:before")) {
                if (o = i.data("with-credentials") || null, r = i.data("type") || l.ajaxSettings && l.ajaxSettings.dataType, i.is("form")) {
                    e = i.attr("method"), t = i.attr("action"), n = i.serializeArray();
                    var s = i.data("ujs:submit-button");
                    s && (n.push(s), i.data("ujs:submit-button", null))
                } else i.is(u.inputChangeSelector) ? (e = i.data("method"), t = i.data("url"), n = i.serialize(), i.data("params") && (n = n + "&" + i.data("params"))) : i.is(u.buttonClickSelector) ? (e = i.data("method") || "get", t = i.data("url"), n = i.serialize(), i.data("params") && (n = n + "&" + i.data("params"))) : (e = i.data("method"), t = u.href(i), n = i.data("params") || null);
                return a = {
                    type: e || "GET",
                    data: n,
                    dataType: r,
                    beforeSend: function(e, t) {
                        if (t.dataType === c && e.setRequestHeader("accept", "*/*;q=0.5, " + t.accepts.script), !u.fire(i, "ajax:beforeSend", [e, t])) return !1;
                        i.trigger("ajax:send", e)
                    },
                    success: function(e, t, n) {
                        i.trigger("ajax:success", [e, t, n])
                    },
                    complete: function(e, t) {
                        i.trigger("ajax:complete", [e, t])
                    },
                    error: function(e, t, n) {
                        i.trigger("ajax:error", [e, t, n])
                    },
                    crossDomain: u.isCrossDomain(t)
                }, o && (a.xhrFields = {
                    withCredentials: o
                }), t && (a.url = t), u.ajax(a)
            }
            return !1
        },
        isCrossDomain: function(e) {
            var t = document.createElement("a");
            t.href = location.href;
            var n = document.createElement("a");
            try {
                return n.href = e, n.href = n.href, !n.protocol || !n.host || t.protocol + "//" + t.host != n.protocol + "//" + n.host
            } catch (i) {
                return !0
            }
        },
        handleMethod: function(e) {
            var t = u.href(e),
                n = e.data("method"),
                i = e.attr("target"),
                o = u.csrfToken(),
                r = u.csrfParam(),
                a = l('<form method="post" action="' + t + '"></form>'),
                s = '<input name="_method" value="' + n + '" type="hidden" />';
            r === c || o === c || u.isCrossDomain(t) || (s += '<input name="' + r + '" value="' + o + '" type="hidden" />'), i && a.attr("target", i), a.hide().append(s).appendTo("body"), a.submit()
        },
        formElements: function(e, t) {
            return e.is("form") ? l(e[0].elements).filter(t) : e.find(t)
        },
        disableFormElements: function(e) {
            u.formElements(e, u.disableSelector).each(function() {
                u.disableFormElement(l(this))
            })
        },
        disableFormElement: function(e) {
            var t, n;
            t = e.is("button") ? "html" : "val", n = e.data("disable-with"), e.data("ujs:enable-with", e[t]()), n !== c && e[t](n), e.prop("disabled", !0)
        },
        enableFormElements: function(e) {
            u.formElements(e, u.enableSelector).each(function() {
                u.enableFormElement(l(this))
            })
        },
        enableFormElement: function(e) {
            var t = e.is("button") ? "html" : "val";
            e.data("ujs:enable-with") && e[t](e.data("ujs:enable-with")), e.prop("disabled", !1)
        },
        allowAction: function(e) {
            var t, n = e.data("confirm"),
                i = !1;
            if (!n) return !0;
            if (u.fire(e, "confirm")) {
                try {
                    i = u.confirm(n)
                } catch (o) {
                    (console.error || console.log).call(console, o.stack || o)
                }
                t = u.fire(e, "confirm:complete", [i])
            }
            return i && t
        },
        blankInputs: function(e, t, n) {
            var i, o = l(),
                r = t || "input,textarea",
                a = e.find(r);
            return a.each(function() {
                if (i = l(this), (i.is("input[type=checkbox],input[type=radio]") ? i.is(":checked") : !! i.val()) === n) {
                    if (i.is("input[type=radio]") && a.filter('input[type=radio]:checked[name="' + i.attr("name") + '"]').length) return !0;
                    o = o.add(i)
                }
            }), !! o.length && o
        },
        nonBlankInputs: function(e, t) {
            return u.blankInputs(e, t, !0)
        },
        stopEverything: function(e) {
            return l(e.target).trigger("ujs:everythingStopped"), e.stopImmediatePropagation(), !1
        },
        disableElement: function(e) {
            var t = e.data("disable-with");
            e.data("ujs:enable-with", e.html()), t !== c && e.html(t), e.bind("click.railsDisable", function(e) {
                return u.stopEverything(e)
            })
        },
        enableElement: function(e) {
            e.data("ujs:enable-with") !== c && (e.html(e.data("ujs:enable-with")), e.removeData("ujs:enable-with")), e.unbind("click.railsDisable")
        }
    }, u.fire(e, "rails:attachBindings") && (l.ajaxPrefilter(function(e, t, n) {
        e.crossDomain || u.CSRFProtection(n)
    }), l(window).on("pageshow.rails", function() {
        l(l.rails.enableSelector).each(function() {
            var e = l(this);
            e.data("ujs:enable-with") && l.rails.enableFormElement(e)
        }), l(l.rails.linkDisableSelector).each(function() {
            var e = l(this);
            e.data("ujs:enable-with") && l.rails.enableElement(e)
        })
    }), e.delegate(u.linkDisableSelector, "ajax:complete", function() {
        u.enableElement(l(this))
    }), e.delegate(u.buttonDisableSelector, "ajax:complete", function() {
        u.enableFormElement(l(this))
    }), e.delegate(u.linkClickSelector, "click.rails", function(e) {
        var t = l(this),
            n = t.data("method"),
            i = t.data("params"),
            o = e.metaKey || e.ctrlKey;
        if (!u.allowAction(t)) return u.stopEverything(e);
        if (!o && t.is(u.linkDisableSelector) && u.disableElement(t), u.isRemote(t)) {
            if (o && (!n || "GET" === n) && !i) return !0;
            var r = u.handleRemote(t);
            return !1 === r ? u.enableElement(t) : r.fail(function() {
                u.enableElement(t)
            }), !1
        }
        return n ? (u.handleMethod(t), !1) : void 0
    }), e.delegate(u.buttonClickSelector, "click.rails", function(e) {
        var t = l(this);
        if (!u.allowAction(t) || !u.isRemote(t)) return u.stopEverything(e);
        t.is(u.buttonDisableSelector) && u.disableFormElement(t);
        var n = u.handleRemote(t);
        return !1 === n ? u.enableFormElement(t) : n.fail(function() {
            u.enableFormElement(t)
        }), !1
    }), e.delegate(u.inputChangeSelector, "change.rails", function(e) {
        var t = l(this);
        return u.allowAction(t) && u.isRemote(t) ? (u.handleRemote(t), !1) : u.stopEverything(e)
    }), e.delegate(u.formSubmitSelector, "submit.rails", function(e) {
        var t, n, i = l(this),
            o = u.isRemote(i);
        if (!u.allowAction(i)) return u.stopEverything(e);
        if (i.attr("novalidate") === c && (t = u.blankInputs(i, u.requiredInputSelector, !1)) && u.fire(i, "ajax:aborted:required", [t])) return u.stopEverything(e);
        if (o) {
            if (n = u.nonBlankInputs(i, u.fileInputSelector)) {
                setTimeout(function() {
                    u.disableFormElements(i)
                }, 13);
                var r = u.fire(i, "ajax:aborted:file", [n]);
                return r || setTimeout(function() {
                    u.enableFormElements(i)
                }, 13), r
            }
            return u.handleRemote(i), !1
        }
        setTimeout(function() {
            u.disableFormElements(i)
        }, 13)
    }), e.delegate(u.formInputClickSelector, "click.rails", function(e) {
        var t = l(this);
        if (!u.allowAction(t)) return u.stopEverything(e);
        var n = t.attr("name"),
            i = n ? {
                name: n,
                value: t.val()
            } : null;
        t.closest("form").data("ujs:submit-button", i)
    }), e.delegate(u.formSubmitSelector, "ajax:send.rails", function(e) {
        this === e.target && u.disableFormElements(l(this))
    }), e.delegate(u.formSubmitSelector, "ajax:complete.rails", function(e) {
        this === e.target && u.enableFormElements(l(this))
    }), l(function() {
        u.refreshCSRFTokens()
    }))
}(jQuery), function(e) {
    "function" == typeof define && define.amd ? define(["jquery"], e) : "object" == typeof exports ? e(require("jquery")) : e(jQuery)
}(function(a, t) {
    function s(e, t, n, i) {
        return !(e.selector != t.selector || e.context != t.context || n && n.$lqguid != t.fn.$lqguid || i && i.$lqguid != t.fn2.$lqguid)
    }
    a.extend(a.fn, {
        livequery: function(n, i) {
            var o, r = this;
            return a.each(l.queries, function(e, t) {
                if (s(r, t, n, i)) return (o = t) && !1
            }), (o = o || new l(r.selector, r.context, n, i)).stopped = !1, o.run(), r
        },
        expire: function(n, i) {
            var o = this;
            return a.each(l.queries, function(e, t) {
                s(o, t, n, i) && !o.stopped && l.stop(t.id)
            }), o
        }
    });
    var l = a.livequery = function(e, t, n, i) {
        var o = this;
        return o.selector = e, o.context = t, o.fn = n, o.fn2 = i, o.elements = a([]), o.stopped = !1, o.id = l.queries.push(o) - 1, n.$lqguid = n.$lqguid || l.guid++, i && (i.$lqguid = i.$lqguid || l.guid++), o
    };
    l.prototype = {
        stop: function() {
            var e = this;
            e.stopped || (e.fn2 && e.elements.each(e.fn2), e.elements = a([]), e.stopped = !0)
        },
        run: function() {
            var e = this;
            if (!e.stopped) {
                var t = e.elements,
                    n = a(e.selector, e.context),
                    i = n.not(t),
                    o = t.not(n);
                e.elements = n, i.each(e.fn), e.fn2 && o.each(e.fn2)
            }
        }
    }, a.extend(l, {
        guid: 0,
        queries: [],
        queue: [],
        running: !1,
        timeout: null,
        registered: [],
        checkQueue: function() {
            if (l.running && l.queue.length) for (var e = l.queue.length; e--;) l.queries[l.queue.shift()].run()
        },
        pause: function() {
            l.running = !1
        },
        play: function() {
            l.running = !0, l.run()
        },
        registerPlugin: function() {
            a.each(arguments, function(e, t) {
                if (a.fn[t] && !(0 < a.inArray(t, l.registered))) {
                    var n = a.fn[t];
                    a.fn[t] = function() {
                        var e = n.apply(this, arguments);
                        return l.run(), e
                    }, l.registered.push(t)
                }
            })
        },
        run: function(e) {
            e !== t ? a.inArray(e, l.queue) < 0 && l.queue.push(e) : a.each(l.queries, function(e) {
                a.inArray(e, l.queue) < 0 && l.queue.push(e)
            }), l.timeout && clearTimeout(l.timeout), l.timeout = setTimeout(l.checkQueue, 20)
        },
        stop: function(e) {
            e !== t ? l.queries[e].stop() : a.each(l.queries, l.prototype.stop)
        }
    }), l.registerPlugin("append", "prepend", "after", "before", "wrap", "attr", "removeAttr", "addClass", "removeClass", "toggleClass", "empty", "remove", "html", "prop", "removeProp"), a(function() {
        l.play()
    })
}), function(e) {
    "function" == typeof define && define.amd ? define(["jquery"], e) : "object" == typeof exports ? e(require("jquery")) : e(jQuery)
}(function(f) {
    function h(e) {
        return g.raw ? e : encodeURIComponent(e)
    }
    function p(e) {
        return g.raw ? e : decodeURIComponent(e)
    }
    function m(e) {
        return h(g.json ? JSON.stringify(e) : String(e))
    }
    function i(e) {
        0 === e.indexOf('"') && (e = e.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, "\\"));
        try {
            return e = decodeURIComponent(e.replace(n, " ")), g.json ? JSON.parse(e) : e
        } catch (t) {}
    }
    function _(e, t) {
        var n = g.raw ? e : i(e);
        return f.isFunction(t) ? t(n) : n
    }
    var n = /\+/g,
        g = f.cookie = function(e, t, n) {
            if (t !== undefined && !f.isFunction(t)) {
                if ("number" == typeof(n = f.extend({}, g.defaults, n)).expires) {
                    var i = n.expires,
                        o = n.expires = new Date;
                    o.setTime(+o + 864e5 * i)
                }
                return document.cookie = [h(e), "=", m(t), n.expires ? "; expires=" + n.expires.toUTCString() : "", n.path ? "; path=" + n.path : "", n.domain ? "; domain=" + n.domain : "", n.secure ? "; secure" : ""].join("")
            }
            for (var r = e ? undefined : {}, a = document.cookie ? document.cookie.split("; ") : [], s = 0, l = a.length; s < l; s++) {
                var c = a[s].split("="),
                    u = p(c.shift()),
                    d = c.join("=");
                if (e && e === u) {
                    r = _(d, t);
                    break
                }
                e || (d = _(d)) === undefined || (r[u] = d)
            }
            return r
        };
    g.defaults = {}, f.removeCookie = function(e, t) {
        return f.cookie(e) !== undefined && (f.cookie(e, "", f.extend({}, t, {
                expires: -1
            })), !f.cookie(e))
    }
}), function(e) {
    "function" == typeof define && define.amd ? define(["jquery"], e) : "object" == typeof module && module.exports ? e(require("jquery")) : e(jQuery)
}(function(r) {
    function a(e) {
        var n = {},
            i = /^jQuery\d+$/;
        return r.each(e.attributes, function(e, t) {
            t.specified && !i.test(t.name) && (n[t.name] = t.value)
        }), n
    }
    function s(e, t) {
        var n = this,
            i = r(n);
        if (n.value == i.attr("placeholder") && i.hasClass(f.customClass)) if (i.data("placeholder-password")) {
            if (i = i.hide().nextAll('input[type="password"]:first').show().attr("id", i.removeAttr("id").data("placeholder-id")), !0 === e) return i[0].value = t;
            i.focus()
        } else n.value = "", i.removeClass(f.customClass), n == l() && n.select()
    }
    function o() {
        var e, t = this,
            n = r(t),
            i = this.id;
        if ("" === t.value) {
            if ("password" === t.type) {
                if (!n.data("placeholder-textinput")) {
                    try {
                        e = n.clone().prop({
                            type: "text"
                        })
                    } catch (o) {
                        e = r("<input>").attr(r.extend(a(this), {
                            type: "text"
                        }))
                    }
                    e.removeAttr("name").data({
                        "placeholder-password": n,
                        "placeholder-id": i
                    }).bind("focus.placeholder", s), n.data({
                        "placeholder-textinput": e,
                        "placeholder-id": i
                    }).before(e)
                }
                n = n.removeAttr("id").hide().prevAll('input[type="text"]:first').attr("id", i).show()
            }
            n.addClass(f.customClass), n[0].value = n.attr("placeholder")
        } else n.removeClass(f.customClass)
    }
    function l() {
        try {
            return document.activeElement
        } catch (e) {}
    }
    var e, t, n = "[object OperaMini]" == Object.prototype.toString.call(window.operamini),
        i = "placeholder" in document.createElement("input") && !n,
        c = "placeholder" in document.createElement("textarea") && !n,
        u = r.valHooks,
        d = r.propHooks;
    if (i && c)(t = r.fn.placeholder = function() {
        return this
    }).input = t.textarea = !0;
    else {
        var f = {};
        (t = r.fn.placeholder = function(e) {
            var t = {
                customClass: "placeholder"
            };
            f = r.extend({}, t, e);
            var n = this;
            return n.filter((i ? "textarea" : ":input") + "[placeholder]").not("." + f.customClass).bind({
                "focus.placeholder": s,
                "blur.placeholder": o
            }).data("placeholder-enabled", !0).trigger("blur.placeholder"), n
        }).input = i, t.textarea = c, e = {
            get: function(e) {
                var t = r(e),
                    n = t.data("placeholder-password");
                return n ? n[0].value : t.data("placeholder-enabled") && t.hasClass(f.customClass) ? "" : e.value
            },
            set: function(e, t) {
                var n = r(e),
                    i = n.data("placeholder-password");
                return i ? i[0].value = t : n.data("placeholder-enabled") ? ("" === t ? (e.value = t, e != l() && o.call(e)) : n.hasClass(f.customClass) && s.call(e, !0, t) || (e.value = t), n) : e.value = t
            }
        }, i || (u.input = e, d.value = e), c || (u.textarea = e, d.value = e), r(function() {
            r(document).delegate("form", "submit.placeholder", function() {
                var e = r("." + f.customClass, this).each(s);
                setTimeout(function() {
                    e.each(o)
                }, 10)
            })
        }), r(window).bind("beforeunload.placeholder", function() {
            r("." + f.customClass).each(function() {
                this.value = ""
            })
        })
    }
}), function(g) {
    g.fn.mailAutoComplete = function(e) {
        var t = {
                boxClass: "mailListBox",
                listClass: "mailListDefault",
                focusClass: "mailListFocus",
                markCalss: "mailListHlignt",
                zIndex: 1,
                autoClass: !0,
                mailArr: ["qq.com", "gmail.com", "126.com", "163.com", "hotmail.com", "outlook.com", "sohu.com", "sina.com"],
                textHint: !1,
                hintText: "",
                focusColor: "#333",
                blurColor: "#999"
            },
            n = g.extend({}, t, e || {});
        n.autoClass && 0 === g("#mailListAppendCss").size() && g('<style id="mailListAppendCss" type="text/css">.mailListBox{border:1px solid #369; background:#fff; }.mailListDefault{padding:0 5px;cursor:pointer;white-space:nowrap;}.mailListFocus{padding:0 5px;cursor:pointer;white-space:nowrap;background:#369;color:white;}.mailListHlignt{color:red;}.mailListFocus .mailListHlignt{color:#fff;}</style>').appendTo(g("head"));
        var a = n.boxClass,
            s = n.listClass,
            l = n.focusClass,
            r = n.markCalss,
            c = n.zIndex,
            u = mailArr = n.mailArr,
            d = n.textHint,
            f = n.hintText,
            h = n.focusColor,
            p = n.blurColor;
        g.createHtml = function(t, n, i) {
            var o = "";
            return g.isArray(n) && (0 < n.length ? (g(".justForJs").show(), g.each(n, function(e) {
                o += e === i ? '<div class="mailHover ' + l + '" id="mailList_' + e + '"><span class="' + r + '">' + t + "</span>@" + n[e] + "</div>" : '<div class="mailHover ' + s + '" id="mailList_' + e + '"><span class="' + r + '">' + t + "</span>@" + n[e] + "</div>"
            })) : g(".justForJs").hide()), o
        };
        var m, _ = -1;
        g(this).each(function() {
            var t = g(this),
                e = g(".justForJs").size(),
                n = "100%",
                i = t.outerHeight();
            t.wrap('<span style="display:block;position:relative;"></span>').before('<div id="mailListBox_' + e + '" class="justForJs ' + a + '" style="font-size: 15px; min-width:' + n + ";_width:" + n + "px;position:absolute;left:-6000px;top:" + i + "px;z-index:" + c + ';"></div>');
            var o, r = g("#mailListBox_" + e);
            t.focus(function() {
                (g(this).css("color", h).parent().css("z-index", c), d && f) && (g.trim(g(this).val()) === f && g(this).val(""));
                g(this).keydown(function(e) {
                    m = v = g.trim(g(this).val()), 0 < v.length && 13 === e.keyCode && (-1 < _ && _ < u.length && (g(this).val(g("#mailList_" + _).text()), r.css("left", "-6000px"), t.parent().parent().next().find("input").focus()), e.preventDefault())
                }), g(this).keyup(function(e) {
                    if (m = v = g.trim(g(this).val()), /@/.test(v) && (m = v.replace(/@.*/, "")), 0 < v.length) {
                        if (38 === e.keyCode) _ <= 0 && (_ = u.length), _--;
                        else if (40 === e.keyCode) _ >= u.length - 1 && (_ = -1), _++;
                        else if (/@/.test(v)) {
                            _ = -1;
                            var t = v.replace(/.*@/, "");
                            u = g.map(mailArr, function(e) {
                                if (new RegExp(t).test(e)) return e
                            })
                        } else u = mailArr;
                        r.html(g.createHtml(m, u, _)).css("left", 0)
                    } else r.css("left", "-6000px")
                }).blur(function() {
                    d && f && ("" === g.trim(g(this).val()) && g(this).val(f));
                    g(this).css("color", p).unbind("keyup").parent().css("z-index", 0), r.css("left", "-6000px")
                }), g(".mailHover").livequery(function() {
                    g(this).on("mouseover", function() {
                        _ = Number(g(this).attr("id").split("_")[1]), o = g("#mailList_" + _).text(), r.children("." + l).removeClass(l).addClass(s), g(this).addClass(l).removeClass(s)
                    })
                })
            }), r.bind("mousedown", function() {
                t.val(o)
            })
        })
    }
}(jQuery), function(l) {
    "use strict";

    function s(e, t, n, i) {
        function o(e, t) {
            return t -= i, !((e -= i) < 0 || a <= e || t < 0 || a <= t) && r.isDark(e, t)
        }
        var r = l(n, t);
        r.addData(e), r.make(), i = i || 0;
        var a = r.getModuleCount(),
            f = r.getModuleCount() + 2 * i,
            s = function(a, s, l, c) {
                var u = this.isDark,
                    d = 1 / f;
                this.isDark = function(e, t) {
                    var n = t * d,
                        i = e * d,
                        o = n + d,
                        r = i + d;
                    return u(e, t) && (o < a || l < n || r < s || c < i)
                }
            };
        this.text = e, this.level = t, this.version = n, this.moduleCount = f, this.isDark = o, this.addBlank = s
    }
    function h(e, t, n, i, o) {
        n = Math.max(1, n || 1), i = Math.min(40, i || 40);
        for (var r = n; r <= i; r += 1) try {
            return new s(e, t, r, o)
        } catch (a) {}
    }
    function o(e, t, n) {
        var i = n.size,
            o = "bold " + n.mSize * i + "px " + n.fontname,
            r = m("<canvas/>")[0].getContext("2d");
        r.font = o;
        var a = r.measureText(n.label).width,
            s = n.mSize,
            l = a / i,
            c = (1 - l) * n.mPosX,
            u = (1 - s) * n.mPosY,
            d = c + l,
            f = u + s,
            h = .01;
        1 === n.mode ? e.addBlank(0, u - h, i, f + h) : e.addBlank(c - h, u - h, d + h, f + h), t.fillStyle = n.fontcolor, t.font = o, t.fillText(n.label, c * i, u * i + .75 * n.mSize * i)
    }
    function r(e, t, n) {
        var i = n.size,
            o = n.image.naturalWidth || 1,
            r = n.image.naturalHeight || 1,
            a = n.mSize,
            s = a * o / r,
            l = (1 - s) * n.mPosX,
            c = (1 - a) * n.mPosY,
            u = l + s,
            d = c + a,
            f = .01;
        3 === n.mode ? e.addBlank(0, c - f, i, d + f) : e.addBlank(l - f, c - f, u + f, d + f), t.drawImage(n.image, l * i, c * i, s * i, a * i)
    }
    function a(e, t, n) {
        m(n.background).is("img") ? t.drawImage(n.background, 0, 0, n.size, n.size) : n.background && (t.fillStyle = n.background, t.fillRect(n.left, n.top, n.size, n.size));
        var i = n.mode;
        1 === i || 2 === i ? o(e, t, n) : 3 !== i && 4 !== i || r(e, t, n)
    }
    function c(e, t, n, i, o, r, a, s) {
        e.isDark(a, s) && t.rect(i, o, r, r)
    }
    function T(e, t, n, i, o, r, a, s, l, c) {
        a ? e.moveTo(t + r, n) : e.moveTo(t, n), s ? (e.lineTo(i - r, n), e.arcTo(i, n, i, o, r)) : e.lineTo(i, n), l ? (e.lineTo(i, o - r), e.arcTo(i, o, t, o, r)) : e.lineTo(i, o), c ? (e.lineTo(t + r, o), e.arcTo(t, o, t, n, r)) : e.lineTo(t, o), a ? (e.lineTo(t, n + r), e.arcTo(t, n, i, n, r)) : e.lineTo(t, n)
    }
    function S(e, t, n, i, o, r, a, s, l, c) {
        a && (e.moveTo(t + r, n), e.lineTo(t, n), e.lineTo(t, n + r), e.arcTo(t, n, t + r, n, r)), s && (e.moveTo(i - r, n), e.lineTo(i, n), e.lineTo(i, n + r), e.arcTo(i, n, i - r, n, r)), l && (e.moveTo(i - r, o), e.lineTo(i, o), e.lineTo(i, o - r), e.arcTo(i, o, i - r, o, r)), c && (e.moveTo(t + r, o), e.lineTo(t, o), e.lineTo(t, o - r), e.arcTo(t, o, t + r, o, r))
    }
    function u(e, t, n, i, o, r, a, s) {
        var l = e.isDark,
            c = i + r,
            u = o + r,
            d = n.radius * r,
            f = a - 1,
            h = a + 1,
            p = s - 1,
            m = s + 1,
            _ = l(a, s),
            g = l(f, p),
            v = l(f, s),
            y = l(f, m),
            b = l(a, m),
            w = l(h, m),
            x = l(h, s),
            k = l(h, p),
            C = l(a, p);
        _ ? T(t, i, o, c, u, d, !v && !C, !v && !b, !x && !b, !x && !C) : S(t, i, o, c, u, d, v && C && g, v && b && y, x && b && w, x && C && k)
    }
    function d(e, t, n) {
        var i, o, r = e.moduleCount,
            a = n.size / r,
            s = c;
        for (g && 0 < n.radius && n.radius <= .5 && (s = u), t.beginPath(), i = 0; i < r; i += 1) for (o = 0; o < r; o += 1) {
            s(e, t, n, n.left + o * a, n.top + i * a, a, i, o)
        }
        if (m(n.fill).is("img")) {
            t.strokeStyle = "rgba(0,0,0,0.5)", t.lineWidth = 2, t.stroke();
            var l = t.globalCompositeOperation;
            t.globalCompositeOperation = "destination-out", t.fill(), t.globalCompositeOperation = l, t.clip(), t.drawImage(n.fill, 0, 0, n.size, n.size), t.restore()
        } else t.fillStyle = n.fill, t.fill()
    }
    function n(e, t) {
        var n = h(t.text, t.ecLevel, t.minVersion, t.maxVersion, t.quiet);
        if (!n) return null;
        var i = m(e).data("qrcode", n),
            o = i[0].getContext("2d");
        return a(n, o, t), d(n, o, t), i
    }
    function t(e) {
        return n(m("<canvas/>").attr("width", e.size).attr("height", e.size), e)
    }
    function i(e) {
        return m("<img/>").attr("src", t(e)[0].toDataURL("image/png"))
    }
    function f(e) {
        var t = h(e.text, e.ecLevel, e.minVersion, e.maxVersion, e.quiet);
        if (!t) return null;
        var n, i, o = e.size,
            r = e.background,
            a = Math.floor,
            s = t.moduleCount,
            l = a(o / s),
            c = a(.5 * (o - l * s)),
            u = {
                position: "relative",
                left: 0,
                top: 0,
                padding: 0,
                margin: 0,
                width: o,
                height: o
            },
            d = {
                position: "absolute",
                padding: 0,
                margin: 0,
                width: l,
                height: l,
                "background-color": e.fill
            },
            f = m("<div/>").data("qrcode", t).css(u);
        for (r && f.css("background-color", r), n = 0; n < s; n += 1) for (i = 0; i < s; i += 1) t.isDark(n, i) && m("<div/>").css(d).css({
            left: c + i * l,
            top: c + n * l
        }).appendTo(f);
        return f
    }
    function p(e) {
        return _ && "canvas" === e.render ? t(e) : _ && "image" === e.render ? i(e) : f(e)
    }
    var e, m = jQuery,
        _ = (e = document.createElement("canvas"), Boolean(e.getContext && e.getContext("2d"))),
        g = "[object Opera]" !== Object.prototype.toString.call(window.opera),
        v = {
            render: "canvas",
            minVersion: 1,
            maxVersion: 40,
            ecLevel: "L",
            left: 0,
            top: 0,
            size: 200,
            fill: "#000",
            background: null,
            text: "no text",
            radius: 0,
            quiet: 0,
            mode: 0,
            mSize: .1,
            mPosX: .5,
            mPosY: .5,
            label: "no label",
            fontname: "sans",
            fontcolor: "#000",
            image: null
        };
    m.fn.qrcode = function(e) {
        var t = m.extend({}, v, e);
        return this.each(function() {
            "canvas" === this.nodeName.toLowerCase() ? n(this, t) : m(this).append(p(t))
        })
    }
}(function() {
    var e, t = function() {
        function w(i, o) {
            if ("undefined" == typeof i.length) throw new Error(i.length + "/" + o);
            var t = function() {
                    for (var e = 0; e < i.length && 0 == i[e];) e += 1;
                    for (var t = new Array(i.length - e + o), n = 0; n < i.length - e; n += 1) t[n] = i[n + e];
                    return t
                }(),
                r = {
                    getAt: function(e) {
                        return t[e]
                    },
                    getLength: function() {
                        return t.length
                    },
                    multiply: function(e) {
                        for (var t = new Array(r.getLength() + e.getLength() - 1), n = 0; n < r.getLength(); n += 1) for (var i = 0; i < e.getLength(); i += 1) t[n + i] ^= h.gexp(h.glog(r.getAt(n)) + h.glog(e.getAt(i)));
                        return w(t, 0)
                    },
                    mod: function(e) {
                        if (r.getLength() - e.getLength() < 0) return r;
                        for (var t = h.glog(r.getAt(0)) - h.glog(e.getAt(0)), n = new Array(r.getLength()), i = 0; i < r.getLength(); i += 1) n[i] = r.getAt(i);
                        for (i = 0; i < e.getLength(); i += 1) n[i] ^= h.gexp(h.glog(e.getAt(i)) + t);
                        return w(n, 0).mod(e)
                    }
                };
            return r
        }
        var o = function(e, t) {
            var l = 236,
                c = 17,
                s = e,
                a = x[t],
                u = null,
                d = 0,
                n = null,
                i = new Array,
                f = {},
                o = function(e, t) {
                    u = function(e) {
                        for (var t = new Array(e), n = 0; n < e; n += 1) {
                            t[n] = new Array(e);
                            for (var i = 0; i < e; i += 1) t[n][i] = null
                        }
                        return t
                    }(d = 4 * s + 17), r(0, 0), r(d - 7, 0), r(0, d - 7), m(), p(), g(e, t), 7 <= s && _(e), null == n && (n = b(s, a, i)), v(n, t)
                },
                r = function(e, t) {
                    for (var n = -1; n <= 7; n += 1) if (!(e + n <= -1 || d <= e + n)) for (var i = -1; i <= 7; i += 1) t + i <= -1 || d <= t + i || (u[e + n][t + i] = 0 <= n && n <= 6 && (0 == i || 6 == i) || 0 <= i && i <= 6 && (0 == n || 6 == n) || 2 <= n && n <= 4 && 2 <= i && i <= 4)
                },
                h = function() {
                    for (var e = 0, t = 0, n = 0; n < 8; n += 1) {
                        o(!0, n);
                        var i = k.getLostPoint(f);
                        (0 == n || i < e) && (e = i, t = n)
                    }
                    return t
                },
                p = function() {
                    for (var e = 8; e < d - 8; e += 1) null == u[e][6] && (u[e][6] = e % 2 == 0);
                    for (var t = 8; t < d - 8; t += 1) null == u[6][t] && (u[6][t] = t % 2 == 0)
                },
                m = function() {
                    for (var e = k.getPatternPosition(s), t = 0; t < e.length; t += 1) for (var n = 0; n < e.length; n += 1) {
                        var i = e[t],
                            o = e[n];
                        if (null == u[i][o]) for (var r = -2; r <= 2; r += 1) for (var a = -2; a <= 2; a += 1) u[i + r][o + a] = -2 == r || 2 == r || -2 == a || 2 == a || 0 == r && 0 == a
                    }
                },
                _ = function(e) {
                    for (var t = k.getBCHTypeNumber(s), n = 0; n < 18; n += 1) {
                        var i = !e && 1 == (t >> n & 1);
                        u[Math.floor(n / 3)][n % 3 + d - 8 - 3] = i
                    }
                    for (n = 0; n < 18; n += 1) {
                        i = !e && 1 == (t >> n & 1);
                        u[n % 3 + d - 8 - 3][Math.floor(n / 3)] = i
                    }
                },
                g = function(e, t) {
                    for (var n = a << 3 | t, i = k.getBCHTypeInfo(n), o = 0; o < 15; o += 1) {
                        var r = !e && 1 == (i >> o & 1);
                        o < 6 ? u[o][8] = r : o < 8 ? u[o + 1][8] = r : u[d - 15 + o][8] = r
                    }
                    for (o = 0; o < 15; o += 1) {
                        r = !e && 1 == (i >> o & 1);
                        o < 8 ? u[8][d - o - 1] = r : o < 9 ? u[8][15 - o - 1 + 1] = r : u[8][15 - o - 1] = r
                    }
                    u[d - 8][8] = !e
                },
                v = function(e, t) {
                    for (var n = -1, i = d - 1, o = 7, r = 0, a = k.getMaskFunction(t), s = d - 1; 0 < s; s -= 2) for (6 == s && (s -= 1);;) {
                        for (var l = 0; l < 2; l += 1) if (null == u[i][s - l]) {
                            var c = !1;
                            r < e.length && (c = 1 == (e[r] >>> o & 1)), a(i, s - l) && (c = !c), u[i][s - l] = c, -1 == (o -= 1) && (r += 1, o = 7)
                        }
                        if ((i += n) < 0 || d <= i) {
                            i -= n, n = -n;
                            break
                        }
                    }
                },
                y = function(e, t) {
                    for (var n = 0, i = 0, o = 0, r = new Array(t.length), a = new Array(t.length), s = 0; s < t.length; s += 1) {
                        var l = t[s].dataCount,
                            c = t[s].totalCount - l;
                        i = Math.max(i, l), o = Math.max(o, c), r[s] = new Array(l);
                        for (var u = 0; u < r[s].length; u += 1) r[s][u] = 255 & e.getBuffer()[u + n];
                        n += l;
                        var d = k.getErrorCorrectPolynomial(c),
                            f = w(r[s], d.getLength() - 1).mod(d);
                        a[s] = new Array(d.getLength() - 1);
                        for (u = 0; u < a[s].length; u += 1) {
                            var h = u + f.getLength() - a[s].length;
                            a[s][u] = 0 <= h ? f.getAt(h) : 0
                        }
                    }
                    var p = 0;
                    for (u = 0; u < t.length; u += 1) p += t[u].totalCount;
                    var m = new Array(p),
                        _ = 0;
                    for (u = 0; u < i; u += 1) for (s = 0; s < t.length; s += 1) u < r[s].length && (m[_] = r[s][u], _ += 1);
                    for (u = 0; u < o; u += 1) for (s = 0; s < t.length; s += 1) u < a[s].length && (m[_] = a[s][u], _ += 1);
                    return m
                },
                b = function(e, t, n) {
                    for (var i = C.getRSBlocks(e, t), o = T(), r = 0; r < n.length; r += 1) {
                        var a = n[r];
                        o.put(a.getMode(), 4), o.put(a.getLength(), k.getLengthInBits(a.getMode(), e)), a.write(o)
                    }
                    var s = 0;
                    for (r = 0; r < i.length; r += 1) s += i[r].dataCount;
                    if (o.getLengthInBits() > 8 * s) throw new Error("code length overflow. (" + o.getLengthInBits() + ">" + 8 * s + ")");
                    for (o.getLengthInBits() + 4 <= 8 * s && o.put(0, 4); o.getLengthInBits() % 8 != 0;) o.putBit(!1);
                    for (; !(o.getLengthInBits() >= 8 * s || (o.put(l, 8), o.getLengthInBits() >= 8 * s));) o.put(c, 8);
                    return y(o, i)
                };
            return f.addData = function(e) {
                var t = S(e);
                i.push(t), n = null
            }, f.isDark = function(e, t) {
                if (e < 0 || d <= e || t < 0 || d <= t) throw new Error(e + "," + t);
                return u[e][t]
            }, f.getModuleCount = function() {
                return d
            }, f.make = function() {
                o(!1, h())
            }, f.createTableTag = function(e, t) {
                e = e || 2;
                var n = "";
                n += '<table style="', n += " border-width: 0px; border-style: none;", n += " border-collapse: collapse;", n += " padding: 0px; margin: " + (t = void 0 === t ? 4 * e : t) + "px;", n += '">', n += "<tbody>";
                for (var i = 0; i < f.getModuleCount(); i += 1) {
                    n += "<tr>";
                    for (var o = 0; o < f.getModuleCount(); o += 1) n += '<td style="', n += " border-width: 0px; border-style: none;", n += " border-collapse: collapse;", n += " padding: 0px; margin: 0px;", n += " width: " + e + "px;", n += " height: " + e + "px;", n += " background-color: ", n += f.isDark(i, o) ? "#000000" : "#ffffff", n += ";", n += '"/>';
                    n += "</tr>"
                }
                return n += "</tbody>", n += "</table>"
            }, f.createImgTag = function(o, e) {
                o = o || 2, e = void 0 === e ? 4 * o : e;
                var t = f.getModuleCount() * o + 2 * e,
                    r = e,
                    a = t - e;
                return D(t, t, function(e, t) {
                    if (r <= e && e < a && r <= t && t < a) {
                        var n = Math.floor((e - r) / o),
                            i = Math.floor((t - r) / o);
                        return f.isDark(i, n) ? 0 : 1
                    }
                    return 1
                })
            }, f
        };
        o.stringToBytes = function(e) {
            for (var t = new Array, n = 0; n < e.length; n += 1) {
                var i = e.charCodeAt(n);
                t.push(255 & i)
            }
            return t
        }, o.createStringToBytes = function(s, l) {
            var r = function() {
                    for (var t = _(s), e = function() {
                        var e = t.read();
                        if (-1 == e) throw new Error;
                        return e
                    }, n = 0, i = {};;) {
                        var o = t.read();
                        if (-1 == o) break;
                        var r = e(),
                            a = e() << 8 | e();
                        i[String.fromCharCode(o << 8 | r)] = a, n += 1
                    }
                    if (n != l) throw new Error(n + " != " + l);
                    return i
                }(),
                a = "?".charCodeAt(0);
            return function(e) {
                for (var t = new Array, n = 0; n < e.length; n += 1) {
                    var i = e.charCodeAt(n);
                    if (i < 128) t.push(i);
                    else {
                        var o = r[e.charAt(n)];
                        "number" == typeof o ? (255 & o) == o ? t.push(o) : (t.push(o >>> 8), t.push(255 & o)) : t.push(a)
                    }
                }
                return t
            }
        };
        var t, n, i, r, e, a, s, u, l, d, c = {
                MODE_NUMBER: 1,
                MODE_ALPHA_NUM: 2,
                MODE_8BIT_BYTE: 4,
                MODE_KANJI: 8
            },
            x = {
                L: 1,
                M: 0,
                Q: 3,
                H: 2
            },
            f = {
                PATTERN000: 0,
                PATTERN001: 1,
                PATTERN010: 2,
                PATTERN011: 3,
                PATTERN100: 4,
                PATTERN101: 5,
                PATTERN110: 6,
                PATTERN111: 7
            },
            k = (t = [
                [],
                [6, 18],
                [6, 22],
                [6, 26],
                [6, 30],
                [6, 34],
                [6, 22, 38],
                [6, 24, 42],
                [6, 26, 46],
                [6, 28, 50],
                [6, 30, 54],
                [6, 32, 58],
                [6, 34, 62],
                [6, 26, 46, 66],
                [6, 26, 48, 70],
                [6, 26, 50, 74],
                [6, 30, 54, 78],
                [6, 30, 56, 82],
                [6, 30, 58, 86],
                [6, 34, 62, 90],
                [6, 28, 50, 72, 94],
                [6, 26, 50, 74, 98],
                [6, 30, 54, 78, 102],
                [6, 28, 54, 80, 106],
                [6, 32, 58, 84, 110],
                [6, 30, 58, 86, 114],
                [6, 34, 62, 90, 118],
                [6, 26, 50, 74, 98, 122],
                [6, 30, 54, 78, 102, 126],
                [6, 26, 52, 78, 104, 130],
                [6, 30, 56, 82, 108, 134],
                [6, 34, 60, 86, 112, 138],
                [6, 30, 58, 86, 114, 142],
                [6, 34, 62, 90, 118, 146],
                [6, 30, 54, 78, 102, 126, 150],
                [6, 24, 50, 76, 102, 128, 154],
                [6, 28, 54, 80, 106, 132, 158],
                [6, 32, 58, 84, 110, 136, 162],
                [6, 26, 54, 82, 110, 138, 166],
                [6, 30, 58, 86, 114, 142, 170]
            ], n = 1335, i = 7973, r = 21522, a = function(e) {
                for (var t = 0; 0 != e;) t += 1, e >>>= 1;
                return t
            }, (e = {}).getBCHTypeInfo = function(e) {
                for (var t = e << 10; 0 <= a(t) - a(n);) t ^= n << a(t) - a(n);
                return (e << 10 | t) ^ r
            }, e.getBCHTypeNumber = function(e) {
                for (var t = e << 12; 0 <= a(t) - a(i);) t ^= i << a(t) - a(i);
                return e << 12 | t
            }, e.getPatternPosition = function(e) {
                return t[e - 1]
            }, e.getMaskFunction = function(e) {
                switch (e) {
                    case f.PATTERN000:
                        return function(e, t) {
                            return (e + t) % 2 == 0
                        };
                    case f.PATTERN001:
                        return function(e) {
                            return e % 2 == 0
                        };
                    case f.PATTERN010:
                        return function(e, t) {
                            return t % 3 == 0
                        };
                    case f.PATTERN011:
                        return function(e, t) {
                            return (e + t) % 3 == 0
                        };
                    case f.PATTERN100:
                        return function(e, t) {
                            return (Math.floor(e / 2) + Math.floor(t / 3)) % 2 == 0
                        };
                    case f.PATTERN101:
                        return function(e, t) {
                            return e * t % 2 + e * t % 3 == 0
                        };
                    case f.PATTERN110:
                        return function(e, t) {
                            return (e * t % 2 + e * t % 3) % 2 == 0
                        };
                    case f.PATTERN111:
                        return function(e, t) {
                            return (e * t % 3 + (e + t) % 2) % 2 == 0
                        };
                    default:
                        throw new Error("bad maskPattern:" + e)
                }
            }, e.getErrorCorrectPolynomial = function(e) {
                for (var t = w([1], 0), n = 0; n < e; n += 1) t = t.multiply(w([1, h.gexp(n)], 0));
                return t
            }, e.getLengthInBits = function(e, t) {
                if (1 <= t && t < 10) switch (e) {
                    case c.MODE_NUMBER:
                        return 10;
                    case c.MODE_ALPHA_NUM:
                        return 9;
                    case c.MODE_8BIT_BYTE:
                    case c.MODE_KANJI:
                        return 8;
                    default:
                        throw new Error("mode:" + e)
                } else if (t < 27) switch (e) {
                    case c.MODE_NUMBER:
                        return 12;
                    case c.MODE_ALPHA_NUM:
                        return 11;
                    case c.MODE_8BIT_BYTE:
                        return 16;
                    case c.MODE_KANJI:
                        return 10;
                    default:
                        throw new Error("mode:" + e)
                } else {
                    if (!(t < 41)) throw new Error("type:" + t);
                    switch (e) {
                        case c.MODE_NUMBER:
                            return 14;
                        case c.MODE_ALPHA_NUM:
                            return 13;
                        case c.MODE_8BIT_BYTE:
                            return 16;
                        case c.MODE_KANJI:
                            return 12;
                        default:
                            throw new Error("mode:" + e)
                    }
                }
            }, e.getLostPoint = function(e) {
                for (var t = e.getModuleCount(), n = 0, i = 0; i < t; i += 1) for (var o = 0; o < t; o += 1) {
                    for (var r = 0, a = e.isDark(i, o), s = -1; s <= 1; s += 1) if (!(i + s < 0 || t <= i + s)) for (var l = -1; l <= 1; l += 1) o + l < 0 || t <= o + l || 0 == s && 0 == l || a == e.isDark(i + s, o + l) && (r += 1);
                    5 < r && (n += 3 + r - 5)
                }
                for (i = 0; i < t - 1; i += 1) for (o = 0; o < t - 1; o += 1) {
                    var c = 0;
                    e.isDark(i, o) && (c += 1), e.isDark(i + 1, o) && (c += 1), e.isDark(i, o + 1) && (c += 1), e.isDark(i + 1, o + 1) && (c += 1), 0 != c && 4 != c || (n += 3)
                }
                for (i = 0; i < t; i += 1) for (o = 0; o < t - 6; o += 1) e.isDark(i, o) && !e.isDark(i, o + 1) && e.isDark(i, o + 2) && e.isDark(i, o + 3) && e.isDark(i, o + 4) && !e.isDark(i, o + 5) && e.isDark(i, o + 6) && (n += 40);
                for (o = 0; o < t; o += 1) for (i = 0; i < t - 6; i += 1) e.isDark(i, o) && !e.isDark(i + 1, o) && e.isDark(i + 2, o) && e.isDark(i + 3, o) && e.isDark(i + 4, o) && !e.isDark(i + 5, o) && e.isDark(i + 6, o) && (n += 40);
                var u = 0;
                for (o = 0; o < t; o += 1) for (i = 0; i < t; i += 1) e.isDark(i, o) && (u += 1);
                return n += Math.abs(100 * u / t / t - 50) / 5 * 10
            }, e),
            h = function() {
                for (var t = new Array(256), n = new Array(256), e = 0; e < 8; e += 1) t[e] = 1 << e;
                for (e = 8; e < 256; e += 1) t[e] = t[e - 4] ^ t[e - 5] ^ t[e - 6] ^ t[e - 8];
                for (e = 0; e < 255; e += 1) n[t[e]] = e;
                var i = {
                    glog: function(e) {
                        if (e < 1) throw new Error("glog(" + e + ")");
                        return n[e]
                    },
                    gexp: function(e) {
                        for (; e < 0;) e += 255;
                        for (; 256 <= e;) e -= 255;
                        return t[e]
                    }
                };
                return i
            }(),
            C = (s = [
                [1, 26, 19],
                [1, 26, 16],
                [1, 26, 13],
                [1, 26, 9],
                [1, 44, 34],
                [1, 44, 28],
                [1, 44, 22],
                [1, 44, 16],
                [1, 70, 55],
                [1, 70, 44],
                [2, 35, 17],
                [2, 35, 13],
                [1, 100, 80],
                [2, 50, 32],
                [2, 50, 24],
                [4, 25, 9],
                [1, 134, 108],
                [2, 67, 43],
                [2, 33, 15, 2, 34, 16],
                [2, 33, 11, 2, 34, 12],
                [2, 86, 68],
                [4, 43, 27],
                [4, 43, 19],
                [4, 43, 15],
                [2, 98, 78],
                [4, 49, 31],
                [2, 32, 14, 4, 33, 15],
                [4, 39, 13, 1, 40, 14],
                [2, 121, 97],
                [2, 60, 38, 2, 61, 39],
                [4, 40, 18, 2, 41, 19],
                [4, 40, 14, 2, 41, 15],
                [2, 146, 116],
                [3, 58, 36, 2, 59, 37],
                [4, 36, 16, 4, 37, 17],
                [4, 36, 12, 4, 37, 13],
                [2, 86, 68, 2, 87, 69],
                [4, 69, 43, 1, 70, 44],
                [6, 43, 19, 2, 44, 20],
                [6, 43, 15, 2, 44, 16],
                [4, 101, 81],
                [1, 80, 50, 4, 81, 51],
                [4, 50, 22, 4, 51, 23],
                [3, 36, 12, 8, 37, 13],
                [2, 116, 92, 2, 117, 93],
                [6, 58, 36, 2, 59, 37],
                [4, 46, 20, 6, 47, 21],
                [7, 42, 14, 4, 43, 15],
                [4, 133, 107],
                [8, 59, 37, 1, 60, 38],
                [8, 44, 20, 4, 45, 21],
                [12, 33, 11, 4, 34, 12],
                [3, 145, 115, 1, 146, 116],
                [4, 64, 40, 5, 65, 41],
                [11, 36, 16, 5, 37, 17],
                [11, 36, 12, 5, 37, 13],
                [5, 109, 87, 1, 110, 88],
                [5, 65, 41, 5, 66, 42],
                [5, 54, 24, 7, 55, 25],
                [11, 36, 12, 7, 37, 13],
                [5, 122, 98, 1, 123, 99],
                [7, 73, 45, 3, 74, 46],
                [15, 43, 19, 2, 44, 20],
                [3, 45, 15, 13, 46, 16],
                [1, 135, 107, 5, 136, 108],
                [10, 74, 46, 1, 75, 47],
                [1, 50, 22, 15, 51, 23],
                [2, 42, 14, 17, 43, 15],
                [5, 150, 120, 1, 151, 121],
                [9, 69, 43, 4, 70, 44],
                [17, 50, 22, 1, 51, 23],
                [2, 42, 14, 19, 43, 15],
                [3, 141, 113, 4, 142, 114],
                [3, 70, 44, 11, 71, 45],
                [17, 47, 21, 4, 48, 22],
                [9, 39, 13, 16, 40, 14],
                [3, 135, 107, 5, 136, 108],
                [3, 67, 41, 13, 68, 42],
                [15, 54, 24, 5, 55, 25],
                [15, 43, 15, 10, 44, 16],
                [4, 144, 116, 4, 145, 117],
                [17, 68, 42],
                [17, 50, 22, 6, 51, 23],
                [19, 46, 16, 6, 47, 17],
                [2, 139, 111, 7, 140, 112],
                [17, 74, 46],
                [7, 54, 24, 16, 55, 25],
                [34, 37, 13],
                [4, 151, 121, 5, 152, 122],
                [4, 75, 47, 14, 76, 48],
                [11, 54, 24, 14, 55, 25],
                [16, 45, 15, 14, 46, 16],
                [6, 147, 117, 4, 148, 118],
                [6, 73, 45, 14, 74, 46],
                [11, 54, 24, 16, 55, 25],
                [30, 46, 16, 2, 47, 17],
                [8, 132, 106, 4, 133, 107],
                [8, 75, 47, 13, 76, 48],
                [7, 54, 24, 22, 55, 25],
                [22, 45, 15, 13, 46, 16],
                [10, 142, 114, 2, 143, 115],
                [19, 74, 46, 4, 75, 47],
                [28, 50, 22, 6, 51, 23],
                [33, 46, 16, 4, 47, 17],
                [8, 152, 122, 4, 153, 123],
                [22, 73, 45, 3, 74, 46],
                [8, 53, 23, 26, 54, 24],
                [12, 45, 15, 28, 46, 16],
                [3, 147, 117, 10, 148, 118],
                [3, 73, 45, 23, 74, 46],
                [4, 54, 24, 31, 55, 25],
                [11, 45, 15, 31, 46, 16],
                [7, 146, 116, 7, 147, 117],
                [21, 73, 45, 7, 74, 46],
                [1, 53, 23, 37, 54, 24],
                [19, 45, 15, 26, 46, 16],
                [5, 145, 115, 10, 146, 116],
                [19, 75, 47, 10, 76, 48],
                [15, 54, 24, 25, 55, 25],
                [23, 45, 15, 25, 46, 16],
                [13, 145, 115, 3, 146, 116],
                [2, 74, 46, 29, 75, 47],
                [42, 54, 24, 1, 55, 25],
                [23, 45, 15, 28, 46, 16],
                [17, 145, 115],
                [10, 74, 46, 23, 75, 47],
                [10, 54, 24, 35, 55, 25],
                [19, 45, 15, 35, 46, 16],
                [17, 145, 115, 1, 146, 116],
                [14, 74, 46, 21, 75, 47],
                [29, 54, 24, 19, 55, 25],
                [11, 45, 15, 46, 46, 16],
                [13, 145, 115, 6, 146, 116],
                [14, 74, 46, 23, 75, 47],
                [44, 54, 24, 7, 55, 25],
                [59, 46, 16, 1, 47, 17],
                [12, 151, 121, 7, 152, 122],
                [12, 75, 47, 26, 76, 48],
                [39, 54, 24, 14, 55, 25],
                [22, 45, 15, 41, 46, 16],
                [6, 151, 121, 14, 152, 122],
                [6, 75, 47, 34, 76, 48],
                [46, 54, 24, 10, 55, 25],
                [2, 45, 15, 64, 46, 16],
                [17, 152, 122, 4, 153, 123],
                [29, 74, 46, 14, 75, 47],
                [49, 54, 24, 10, 55, 25],
                [24, 45, 15, 46, 46, 16],
                [4, 152, 122, 18, 153, 123],
                [13, 74, 46, 32, 75, 47],
                [48, 54, 24, 14, 55, 25],
                [42, 45, 15, 32, 46, 16],
                [20, 147, 117, 4, 148, 118],
                [40, 75, 47, 7, 76, 48],
                [43, 54, 24, 22, 55, 25],
                [10, 45, 15, 67, 46, 16],
                [19, 148, 118, 6, 149, 119],
                [18, 75, 47, 31, 76, 48],
                [34, 54, 24, 34, 55, 25],
                [20, 45, 15, 61, 46, 16]
            ], u = function(e, t) {
                var n = {};
                return n.totalCount = e, n.dataCount = t, n
            }, d = function(e, t) {
                switch (t) {
                    case x.L:
                        return s[4 * (e - 1) + 0];
                    case x.M:
                        return s[4 * (e - 1) + 1];
                    case x.Q:
                        return s[4 * (e - 1) + 2];
                    case x.H:
                        return s[4 * (e - 1) + 3];
                    default:
                        return undefined
                }
            }, (l = {}).getRSBlocks = function(e, t) {
                var n = d(e, t);
                if (void 0 === n) throw new Error("bad rs block @ typeNumber:" + e + "/errorCorrectLevel:" + t);
                for (var i = n.length / 3, o = new Array, r = 0; r < i; r += 1) for (var a = n[3 * r + 0], s = n[3 * r + 1], l = n[3 * r + 2], c = 0; c < a; c += 1) o.push(u(s, l));
                return o
            }, l),
            T = function() {
                var n = new Array,
                    i = 0,
                    o = {
                        getBuffer: function() {
                            return n
                        },
                        getAt: function(e) {
                            var t = Math.floor(e / 8);
                            return 1 == (n[t] >>> 7 - e % 8 & 1)
                        },
                        put: function(e, t) {
                            for (var n = 0; n < t; n += 1) o.putBit(1 == (e >>> t - n - 1 & 1))
                        },
                        getLengthInBits: function() {
                            return i
                        },
                        putBit: function(e) {
                            var t = Math.floor(i / 8);
                            n.length <= t && n.push(0), e && (n[t] |= 128 >>> i % 8), i += 1
                        }
                    };
                return o
            },
            S = function(e) {
                var t = c.MODE_8BIT_BYTE,
                    n = o.stringToBytes(e),
                    i = {
                        getMode: function() {
                            return t
                        },
                        getLength: function() {
                            return n.length
                        },
                        write: function(e) {
                            for (var t = 0; t < n.length; t += 1) e.put(n[t], 8)
                        }
                    };
                return i
            },
            p = function() {
                var n = new Array,
                    o = {
                        writeByte: function(e) {
                            n.push(255 & e)
                        },
                        writeShort: function(e) {
                            o.writeByte(e), o.writeByte(e >>> 8)
                        },
                        writeBytes: function(e, t, n) {
                            t = t || 0, n = n || e.length;
                            for (var i = 0; i < n; i += 1) o.writeByte(e[i + t])
                        },
                        writeString: function(e) {
                            for (var t = 0; t < e.length; t += 1) o.writeByte(e.charCodeAt(t))
                        },
                        toByteArray: function() {
                            return n
                        },
                        toString: function() {
                            var e = "";
                            e += "[";
                            for (var t = 0; t < n.length; t += 1) 0 < t && (e += ","), e += n[t];
                            return e += "]"
                        }
                    };
                return o
            },
            m = function() {
                var n = 0,
                    i = 0,
                    o = 0,
                    r = "",
                    e = {},
                    a = function(e) {
                        r += String.fromCharCode(t(63 & e))
                    },
                    t = function(e) {
                        if (e < 0);
                        else {
                            if (e < 26) return 65 + e;
                            if (e < 52) return e - 26 + 97;
                            if (e < 62) return e - 52 + 48;
                            if (62 == e) return 43;
                            if (63 == e) return 47
                        }
                        throw new Error("n:" + e)
                    };
                return e.writeByte = function(e) {
                    for (n = n << 8 | 255 & e, i += 8, o += 1; 6 <= i;) a(n >>> i - 6), i -= 6
                }, e.flush = function() {
                    if (0 < i && (a(n << 6 - i), i = n = 0), o % 3 != 0) for (var e = 3 - o % 3, t = 0; t < e; t += 1) r += "="
                }, e.toString = function() {
                    return r
                }, e
            },
            _ = function(e) {
                var n = e,
                    i = 0,
                    o = 0,
                    r = 0,
                    t = {
                        read: function() {
                            for (; r < 8;) {
                                if (i >= n.length) {
                                    if (0 == r) return -1;
                                    throw new Error("unexpected end of file./" + r)
                                }
                                var e = n.charAt(i);
                                if (i += 1, "=" == e) return r = 0, -1;
                                e.match(/^\s$/) || (o = o << 6 | a(e.charCodeAt(0)), r += 6)
                            }
                            var t = o >>> r - 8 & 255;
                            return r -= 8, t
                        }
                    },
                    a = function(e) {
                        if (65 <= e && e <= 90) return e - 65;
                        if (97 <= e && e <= 122) return e - 97 + 26;
                        if (48 <= e && e <= 57) return e - 48 + 52;
                        if (43 == e) return 62;
                        if (47 == e) return 63;
                        throw new Error("c:" + e)
                    };
                return t
            },
            g = function(e, t) {
                var o = e,
                    r = t,
                    d = new Array(e * t),
                    n = {
                        setPixel: function(e, t, n) {
                            d[t * o + e] = n
                        },
                        write: function(e) {
                            e.writeString("GIF87a"), e.writeShort(o), e.writeShort(r), e.writeByte(128), e.writeByte(0), e.writeByte(0), e.writeByte(0), e.writeByte(0), e.writeByte(0), e.writeByte(255), e.writeByte(255), e.writeByte(255), e.writeString(","), e.writeShort(0), e.writeShort(0), e.writeShort(o), e.writeShort(r), e.writeByte(0);
                            var t = 2,
                                n = a(t);
                            e.writeByte(t);
                            for (var i = 0; 255 < n.length - i;) e.writeByte(255), e.writeBytes(n, i, 255), i += 255;
                            e.writeByte(n.length - i), e.writeBytes(n, i, n.length - i), e.writeByte(0), e.writeString(";")
                        }
                    },
                    f = function(e) {
                        var n = e,
                            i = 0,
                            o = 0,
                            t = {
                                write: function(e, t) {
                                    if (e >>> t != 0) throw new Error("length over");
                                    for (; 8 <= i + t;) n.writeByte(255 & (e << i | o)), t -= 8 - i, e >>>= 8 - i, i = o = 0;
                                    o |= e << i, i += t
                                },
                                flush: function() {
                                    0 < i && n.writeByte(o)
                                }
                            };
                        return t
                    },
                    a = function(e) {
                        for (var t = 1 << e, n = 1 + (1 << e), i = e + 1, o = h(), r = 0; r < t; r += 1) o.add(String.fromCharCode(r));
                        o.add(String.fromCharCode(t)), o.add(String.fromCharCode(n));
                        var a = p(),
                            s = f(a);
                        s.write(t, i);
                        var l = 0,
                            c = String.fromCharCode(d[l]);
                        for (l += 1; l < d.length;) {
                            var u = String.fromCharCode(d[l]);
                            l += 1, o.contains(c + u) ? c += u : (s.write(o.indexOf(c), i), o.size() < 4095 && (o.size() == 1 << i && (i += 1), o.add(c + u)), c = u)
                        }
                        return s.write(o.indexOf(c), i), s.write(n, i), s.flush(), a.toByteArray()
                    },
                    h = function() {
                        var t = {},
                            n = 0,
                            i = {
                                add: function(e) {
                                    if (i.contains(e)) throw new Error("dup key:" + e);
                                    t[e] = n, n += 1
                                },
                                size: function() {
                                    return n
                                },
                                indexOf: function(e) {
                                    return t[e]
                                },
                                contains: function(e) {
                                    return "undefined" != typeof t[e]
                                }
                            };
                        return i
                    };
                return n
            },
            D = function(e, t, n, i) {
                for (var o = g(e, t), r = 0; r < t; r += 1) for (var a = 0; a < e; a += 1) o.setPixel(a, r, n(a, r));
                var s = p();
                o.write(s);
                for (var l = m(), c = s.toByteArray(), u = 0; u < c.length; u += 1) l.writeByte(c[u]);
                l.flush();
                var d = "";
                return d += "<img", d += ' src="', d += "data:image/gif;base64,", d += l, d += '"', d += ' width="', d += e, d += '"', d += ' height="', d += t, d += '"', i && (d += ' alt="', d += i, d += '"'), d += "/>"
            };
        return o
    }();
    return e = function() {
        return t
    }, "function" == typeof define && define.amd ? define([], e) : "object" == typeof exports && (module.exports = e()), t.stringToBytes = function(e) {
        function t(e) {
            for (var t = [], n = 0; n < e.length; n++) {
                var i = e.charCodeAt(n);
                i < 128 ? t.push(i) : i < 2048 ? t.push(192 | i >> 6, 128 | 63 & i) : i < 55296 || 57344 <= i ? t.push(224 | i >> 12, 128 | i >> 6 & 63, 128 | 63 & i) : (n++, i = 65536 + ((1023 & i) << 10 | 1023 & e.charCodeAt(n)), t.push(240 | i >> 18, 128 | i >> 12 & 63, 128 | i >> 6 & 63, 128 | 63 & i))
            }
            return t
        }
        return t(e)
    }, t
}()), function(G, W, i) {
    function l(e, t) {
        this.bodyOverflowX, this.callbacks = {
            hide: [],
            show: []
        }, this.checkInterval = null, this.Content, this.$el = G(e), this.$elProxy, this.elProxyPosition, this.enabled = !0, this.options = G.extend({}, c, t), this.mouseIsOverProxy = !1, this.namespace = "tooltipster-" + Math.round(1e5 * Math.random()), this.Status = "hidden", this.timerHide = null, this.timerShow = null, this.$tooltip, this.options.iconTheme = this.options.iconTheme.replace(".", ""), this.options.theme = this.options.theme.replace(".", ""), this._init()
    }
    function o(t, n) {
        var i = !0;
        return G.each(t, function(e) {
            if ("undefined" == typeof n[e] || t[e] !== n[e]) return i = !1
        }), i
    }
    function r() {
        return !t && d
    }
    function u() {
        var e = (i.body || i.documentElement).style,
            t = "transition";
        if ("string" == typeof e[t]) return !0;
        v = ["Moz", "Webkit", "Khtml", "O", "ms"], t = t.charAt(0).toUpperCase() + t.substr(1);
        for (var n = 0; n < v.length; n++) if ("string" == typeof e[v[n] + t]) return !0;
        return !1
    }
    var e = "tooltipster",
        c = {
            animation: "fade",
            arrow: !0,
            arrowColor: "",
            autoClose: !0,
            content: null,
            contentAsHTML: !1,
            contentCloning: !0,
            debug: !0,
            delay: 200,
            minWidth: 0,
            maxWidth: null,
            functionInit: function() {},
            functionBefore: function(e, t) {
                t()
            },
            functionReady: function() {},
            functionAfter: function() {},
            hideOnClick: !1,
            icon: "(?)",
            iconCloning: !0,
            iconDesktop: !1,
            iconTouch: !1,
            iconTheme: "tooltipster-icon",
            interactive: !1,
            interactiveTolerance: 350,
            multiple: !1,
            offsetX: 0,
            offsetY: 0,
            onlyOne: !1,
            position: "top",
            positionTracker: !1,
            positionTrackerCallback: function() {
                "hover" == this.option("trigger") && this.option("autoClose") && this.hide()
            },
            restoration: "current",
            speed: 350,
            timer: 0,
            theme: "tooltipster-default",
            touchDevices: !0,
            trigger: "hover",
            updateAnimation: !0
        };
    l.prototype = {
        _init: function() {
            var e = this;
            if (i.querySelector) {
                var t = null;
                e.$el.data("tooltipster-initialTitle") === undefined && ((t = e.$el.attr("title")) === undefined && (t = null), e.$el.data("tooltipster-initialTitle", t)), null !== e.options.content ? e._content_set(e.options.content) : e._content_set(t);
                var n = e.options.functionInit.call(e.$el, e.$el, e.Content);
                void 0 !== n && e._content_set(n), e.$el.removeAttr("title").addClass("tooltipstered"), !d && e.options.iconDesktop || d && e.options.iconTouch ? ("string" == typeof e.options.icon ? (e.$elProxy = G('<span class="' + e.options.iconTheme + '"></span>'), e.$elProxy.text(e.options.icon)) : e.options.iconCloning ? e.$elProxy = e.options.icon.clone(!0) : e.$elProxy = e.options.icon, e.$elProxy.insertAfter(e.$el)) : e.$elProxy = e.$el, "hover" == e.options.trigger ? (e.$elProxy.on("mouseenter." + e.namespace, function() {
                    r() && !e.options.touchDevices || (e.mouseIsOverProxy = !0, e._show())
                }).on("mouseleave." + e.namespace, function() {
                    r() && !e.options.touchDevices || (e.mouseIsOverProxy = !1)
                }), d && e.options.touchDevices && e.$elProxy.on("touchstart." + e.namespace, function() {
                    e._showNow()
                })) : "click" == e.options.trigger && e.$elProxy.on("click." + e.namespace, function() {
                        r() && !e.options.touchDevices || e._show()
                    })
            }
        },
        _show: function() {
            var e = this;
            "shown" != e.Status && "appearing" != e.Status && (e.options.delay ? e.timerShow = setTimeout(function() {
                ("click" == e.options.trigger || "hover" == e.options.trigger && e.mouseIsOverProxy) && e._showNow()
            }, e.options.delay) : e._showNow())
        },
        _showNow: function(l) {
            var c = this;
            c.options.functionBefore.call(c.$el, c.$el, function() {
                if (c.enabled && null !== c.Content) {
                    l && c.callbacks.show.push(l), c.callbacks.hide = [], clearTimeout(c.timerShow), c.timerShow = null, clearTimeout(c.timerHide), c.timerHide = null, c.options.onlyOne && G(".tooltipstered").not(c.$el).each(function(e, t) {
                        var r = G(t),
                            n = r.data("tooltipster-ns");
                        G.each(n, function(e, t) {
                            var n = r.data(t),
                                i = n.status(),
                                o = n.option("autoClose");
                            "hidden" !== i && "disappearing" !== i && o && n.hide()
                        })
                    });
                    var e = function() {
                        c.Status = "shown", G.each(c.callbacks.show, function(e, t) {
                            t.call(c.$el)
                        }), c.callbacks.show = []
                    };
                    if ("hidden" !== c.Status) {
                        var t = 0;
                        "disappearing" === c.Status ? (c.Status = "appearing", u() ? (c.$tooltip.clearQueue().removeClass("tooltipster-dying").addClass("tooltipster-" + c.options.animation + "-show"), 0 < c.options.speed && c.$tooltip.delay(c.options.speed), c.$tooltip.queue(e)) : c.$tooltip.stop().fadeIn(e)) : "shown" === c.Status && e()
                    } else {
                        c.Status = "appearing";
                        t = c.options.speed;
                        c.bodyOverflowX = G("body").css("overflow-x"), G("body").css("overflow-x", "hidden");
                        var n = "tooltipster-" + c.options.animation,
                            i = "-webkit-transition-duration: " + c.options.speed + "ms; -webkit-animation-duration: " + c.options.speed + "ms; -moz-transition-duration: " + c.options.speed + "ms; -moz-animation-duration: " + c.options.speed + "ms; -o-transition-duration: " + c.options.speed + "ms; -o-animation-duration: " + c.options.speed + "ms; -ms-transition-duration: " + c.options.speed + "ms; -ms-animation-duration: " + c.options.speed + "ms; transition-duration: " + c.options.speed + "ms; animation-duration: " + c.options.speed + "ms;",
                            o = c.options.minWidth ? "min-width:" + Math.round(c.options.minWidth) + "px;" : "",
                            r = c.options.maxWidth ? "max-width:" + Math.round(c.options.maxWidth) + "px;" : "",
                            a = c.options.interactive ? "pointer-events: auto;" : "";
                        if (c.$tooltip = G('<div class="tooltipster-base ' + c.options.theme + '" style="' + o + " " + r + " " + a + " " + i + '"><div class="tooltipster-content"></div></div>'), u() && c.$tooltip.addClass(n), c._content_insert(), c.$tooltip.appendTo("body"), c.reposition(), c.options.functionReady.call(c.$el, c.$el, c.$tooltip), u() ? (c.$tooltip.addClass(n + "-show"), 0 < c.options.speed && c.$tooltip.delay(c.options.speed), c.$tooltip.queue(e)) : c.$tooltip.css("display", "none").fadeIn(c.options.speed, e), c._interval_set(), G(W).on("scroll." + c.namespace + " resize." + c.namespace, function() {
                                c.reposition()
                            }), c.options.autoClose) if (G("body").off("." + c.namespace), "hover" == c.options.trigger) {
                            if (d && setTimeout(function() {
                                    G("body").on("touchstart." + c.namespace, function() {
                                        c.hide()
                                    })
                                }, 0), c.options.interactive) {
                                d && c.$tooltip.on("touchstart." + c.namespace, function(e) {
                                    e.stopPropagation()
                                });
                                var s = null;
                                c.$elProxy.add(c.$tooltip).on("mouseleave." + c.namespace + "-autoClose", function() {
                                    clearTimeout(s), s = setTimeout(function() {
                                        c.hide()
                                    }, c.options.interactiveTolerance)
                                }).on("mouseenter." + c.namespace + "-autoClose", function() {
                                    clearTimeout(s)
                                })
                            } else c.$elProxy.on("mouseleave." + c.namespace + "-autoClose", function() {
                                c.hide()
                            });
                            c.options.hideOnClick && c.$elProxy.on("click." + c.namespace + "-autoClose", function() {
                                c.hide()
                            })
                        } else "click" == c.options.trigger && (setTimeout(function() {
                            G("body").on("click." + c.namespace + " touchstart." + c.namespace, function() {
                                c.hide()
                            })
                        }, 0), c.options.interactive && c.$tooltip.on("click." + c.namespace + " touchstart." + c.namespace, function(e) {
                            e.stopPropagation()
                        }))
                    }
                    0 < c.options.timer && (c.timerHide = setTimeout(function() {
                        c.timerHide = null, c.hide()
                    }, c.options.timer + t))
                }
            })
        },
        _interval_set: function() {
            var n = this;
            n.checkInterval = setInterval(function() {
                if (0 === G("body").find(n.$el).length || 0 === G("body").find(n.$elProxy).length || "hidden" == n.Status || 0 === G("body").find(n.$tooltip).length)"shown" != n.Status && "appearing" != n.Status || n.hide(), n._interval_cancel();
                else if (n.options.positionTracker) {
                    var e = n._repositionInfo(n.$elProxy),
                        t = !1;
                    o(e.dimension, n.elProxyPosition.dimension) && ("fixed" === n.$elProxy.css("position") ? o(e.position, n.elProxyPosition.position) && (t = !0) : o(e.offset, n.elProxyPosition.offset) && (t = !0)), t || (n.reposition(), n.options.positionTrackerCallback.call(n, n.$el))
                }
            }, 200)
        },
        _interval_cancel: function() {
            clearInterval(this.checkInterval), this.checkInterval = null
        },
        _content_set: function(e) {
            "object" == typeof e && null !== e && this.options.contentCloning && (e = e.clone(!0)), this.Content = e
        },
        _content_insert: function() {
            var e = this,
                t = this.$tooltip.find(".tooltipster-content");
            "string" != typeof e.Content || e.options.contentAsHTML ? t.empty().append(e.Content) : t.text(e.Content)
        },
        _update: function(e) {
            var t = this;
            t._content_set(e), null !== t.Content ? "hidden" !== t.Status && (t._content_insert(), t.reposition(), t.options.updateAnimation && (u() ? (t.$tooltip.css({
                    width: "",
                    "-webkit-transition": "all " + t.options.speed + "ms, width 0ms, height 0ms, left 0ms, top 0ms",
                    "-moz-transition": "all " + t.options.speed + "ms, width 0ms, height 0ms, left 0ms, top 0ms",
                    "-o-transition": "all " + t.options.speed + "ms, width 0ms, height 0ms, left 0ms, top 0ms",
                    "-ms-transition": "all " + t.options.speed + "ms, width 0ms, height 0ms, left 0ms, top 0ms",
                    transition: "all " + t.options.speed + "ms, width 0ms, height 0ms, left 0ms, top 0ms"
                }).addClass("tooltipster-content-changing"), setTimeout(function() {
                    "hidden" != t.Status && (t.$tooltip.removeClass("tooltipster-content-changing"), setTimeout(function() {
                        "hidden" !== t.Status && t.$tooltip.css({
                            "-webkit-transition": t.options.speed + "ms",
                            "-moz-transition": t.options.speed + "ms",
                            "-o-transition": t.options.speed + "ms",
                            "-ms-transition": t.options.speed + "ms",
                            transition: t.options.speed + "ms"
                        })
                    }, t.options.speed))
                }, t.options.speed)) : t.$tooltip.fadeTo(t.options.speed, .5, function() {
                    "hidden" != t.Status && t.$tooltip.fadeTo(t.options.speed, 1)
                }))) : t.hide()
        },
        _repositionInfo: function(e) {
            return {
                dimension: {
                    height: e.outerHeight(!1),
                    width: e.outerWidth(!1)
                },
                offset: e.offset(),
                position: {
                    left: parseInt(e.css("left")),
                    top: parseInt(e.css("top"))
                }
            }
        },
        hide: function(e) {
            var n = this;
            e && n.callbacks.hide.push(e), n.callbacks.show = [], clearTimeout(n.timerShow), n.timerShow = null, clearTimeout(n.timerHide), n.timerHide = null;
            var t = function() {
                G.each(n.callbacks.hide, function(e, t) {
                    t.call(n.$el)
                }), n.callbacks.hide = []
            };
            if ("shown" == n.Status || "appearing" == n.Status) {
                n.Status = "disappearing";
                var i = function() {
                    n.Status = "hidden", "object" == typeof n.Content && null !== n.Content && n.Content.detach(), n.$tooltip.remove(), n.$tooltip = null, G(W).off("." + n.namespace), G("body").off("." + n.namespace).css("overflow-x", n.bodyOverflowX), G("body").off("." + n.namespace), n.$elProxy.off("." + n.namespace + "-autoClose"), n.options.functionAfter.call(n.$el, n.$el), t()
                };
                u() ? (n.$tooltip.clearQueue().removeClass("tooltipster-" + n.options.animation + "-show").addClass("tooltipster-dying"), 0 < n.options.speed && n.$tooltip.delay(n.options.speed), n.$tooltip.queue(i)) : n.$tooltip.stop().fadeOut(n.options.speed, i)
            } else "hidden" == n.Status && t();
            return n
        },
        show: function(e) {
            return this._showNow(e), this
        },
        update: function(e) {
            return this.content(e)
        },
        content: function(e) {
            return void 0 === e ? this.Content : (this._update(e), this)
        },
        reposition: function() {
            function e() {
                var e = G(W).scrollLeft();
                S - e < 0 && (i = S - e, S = e), o < S + a - e && (i = S - (o + e - a), S = o + e - a)
            }
            function t(e, t) {
                r.offset.top - G(W).scrollTop() - s - I - 12 < 0 && -1 < t.indexOf("top") && (M = e), r.offset.top + r.dimension.height + s + 12 + I > G(W).scrollTop() + G(W).height() && -1 < t.indexOf("bottom") && (M = e, E = r.offset.top - s - I - 12)
            }
            var n = this;
            if (0 !== G("body").find(n.$tooltip).length) {
                n.$tooltip.css("width", ""), n.elProxyPosition = n._repositionInfo(n.$elProxy);
                var i = null,
                    o = G(W).width(),
                    r = n.elProxyPosition,
                    a = n.$tooltip.outerWidth(!1),
                    s = (n.$tooltip.innerWidth(), n.$tooltip.outerHeight(!1));
                if (n.$elProxy.is("area")) {
                    var l = n.$elProxy.attr("shape"),
                        c = n.$elProxy.parent().attr("name"),
                        u = G('img[usemap="#' + c + '"]'),
                        d = u.offset().left,
                        f = u.offset().top,
                        h = n.$elProxy.attr("coords") !== undefined ? n.$elProxy.attr("coords").split(",") : undefined;
                    if ("circle" == l) {
                        var p = parseInt(h[0]),
                            m = parseInt(h[1]),
                            _ = parseInt(h[2]);
                        r.dimension.height = 2 * _, r.dimension.width = 2 * _, r.offset.top = f + m - _, r.offset.left = d + p - _
                    } else if ("rect" == l) {
                        p = parseInt(h[0]), m = parseInt(h[1]);
                        var g = parseInt(h[2]),
                            v = parseInt(h[3]);
                        r.dimension.height = v - m, r.dimension.width = g - p, r.offset.top = f + m, r.offset.left = d + p
                    } else if ("poly" == l) {
                        for (var y = 0, b = 0, w = 0, x = 0, k = "even", C = 0; C < h.length; C++) {
                            var T = parseInt(h[C]);
                            "even" == k ? (w < T && (w = T, 0 === C && (y = w)), T < y && (y = T), k = "odd") : (x < T && (x = T, 1 == C && (b = x)), T < b && (b = T), k = "even")
                        }
                        r.dimension.height = x - b, r.dimension.width = w - y, r.offset.top = f + b, r.offset.left = d + y
                    } else r.dimension.height = u.outerHeight(!1), r.dimension.width = u.outerWidth(!1), r.offset.top = f, r.offset.left = d
                }
                var S = 0,
                    D = 0,
                    E = 0,
                    I = parseInt(n.options.offsetY),
                    N = parseInt(n.options.offsetX),
                    M = n.options.position;
                if ("top" == M) {
                    var P = r.offset.left + a - (r.offset.left + r.dimension.width);
                    S = r.offset.left + N - P / 2, E = r.offset.top - s - I - 12, e(), t("bottom", "top")
                }
                if ("top-left" == M && (S = r.offset.left + N, E = r.offset.top - s - I - 12, e(), t("bottom-left", "top-left")), "top-right" == M && (S = r.offset.left + r.dimension.width + N - a, E = r.offset.top - s - I - 12, e(), t("bottom-right", "top-right")), "bottom" == M) {
                    P = r.offset.left + a - (r.offset.left + r.dimension.width);
                    S = r.offset.left - P / 2 + N, E = r.offset.top + r.dimension.height + I + 12, e(), t("top", "bottom")
                }
                if ("bottom-left" == M && (S = r.offset.left + N, E = r.offset.top + r.dimension.height + I + 12, e(), t("top-left", "bottom-left")), "bottom-right" == M && (S = r.offset.left + r.dimension.width + N - a, E = r.offset.top + r.dimension.height + I + 12, e(), t("top-right", "bottom-right")), "left" == M) {
                    S = r.offset.left - N - a - 12, D = r.offset.left + N + r.dimension.width + 12;
                    var $ = r.offset.top + s - (r.offset.top + r.dimension.height);
                    if (E = r.offset.top - $ / 2 - I, S < 0 && o < D + a) {
                        var A = 2 * parseFloat(n.$tooltip.css("border-width")),
                            j = a + S - A;
                        n.$tooltip.css("width", j + "px"), s = n.$tooltip.outerHeight(!1), S = r.offset.left - N - j - 12 - A, $ = r.offset.top + s - (r.offset.top + r.dimension.height), E = r.offset.top - $ / 2 - I
                    } else S < 0 && (S = r.offset.left + N + r.dimension.width + 12, i = "left")
                }
                if ("right" == M) {
                    S = r.offset.left + N + r.dimension.width + 12, D = r.offset.left - N - a - 12;
                    $ = r.offset.top + s - (r.offset.top + r.dimension.height);
                    if (E = r.offset.top - $ / 2 - I, o < S + a && D < 0) {
                        A = 2 * parseFloat(n.$tooltip.css("border-width")), j = o - S - A;
                        n.$tooltip.css("width", j + "px"), s = n.$tooltip.outerHeight(!1), $ = r.offset.top + s - (r.offset.top + r.dimension.height), E = r.offset.top - $ / 2 - I
                    } else o < S + a && (S = r.offset.left - N - a - 12, i = "right")
                }
                if (n.options.arrow) {
                    var L = "tooltipster-arrow-" + M;
                    if (n.options.arrowColor.length < 1) var q = n.$tooltip.css("background-color");
                    else q = n.options.arrowColor;
                    if (i ? "left" == i ? (L = "tooltipster-arrow-right", i = "") : "right" == i ? (L = "tooltipster-arrow-left", i = "") : i = "left:" + Math.round(i) + "px;" : i = "", "top" == M || "top-left" == M || "top-right" == M) var O = parseFloat(n.$tooltip.css("border-bottom-width")),
                        R = n.$tooltip.css("border-bottom-color");
                    else if ("bottom" == M || "bottom-left" == M || "bottom-right" == M) O = parseFloat(n.$tooltip.css("border-top-width")), R = n.$tooltip.css("border-top-color");
                    else if ("left" == M) O = parseFloat(n.$tooltip.css("border-right-width")), R = n.$tooltip.css("border-right-color");
                    else if ("right" == M) O = parseFloat(n.$tooltip.css("border-left-width")), R = n.$tooltip.css("border-left-color");
                    else O = parseFloat(n.$tooltip.css("border-bottom-width")), R = n.$tooltip.css("border-bottom-color");
                    1 < O && O++;
                    var z = "";
                    if (0 !== O) {
                        var F = "",
                            H = "border-color: " + R + ";"; - 1 !== L.indexOf("bottom") ? F = "margin-top: -" + Math.round(O) + "px;" : -1 !== L.indexOf("top") ? F = "margin-bottom: -" + Math.round(O) + "px;" : -1 !== L.indexOf("left") ? F = "margin-right: -" + Math.round(O) + "px;" : -1 !== L.indexOf("right") && (F = "margin-left: -" + Math.round(O) + "px;"), z = '<span class="tooltipster-arrow-border" style="' + F + " " + H + ';"></span>'
                    }
                    n.$tooltip.find(".tooltipster-arrow").remove();
                    var B = '<div class="' + L + ' tooltipster-arrow" style="' + i + '">' + z + '<span style="border-color:' + q + ';"></span></div>';
                    n.$tooltip.append(B)
                }
                n.$tooltip.css({
                    top: Math.round(E) + "px",
                    left: Math.round(S) + "px"
                })
            }
            return n
        },
        enable: function() {
            return this.enabled = !0, this
        },
        disable: function() {
            return this.hide(), this.enabled = !1, this
        },
        destroy: function() {
            var t = this;
            t.hide(), t.$el[0] !== t.$elProxy[0] && t.$elProxy.remove(), t.$el.removeData(t.namespace).off("." + t.namespace);
            var e = t.$el.data("tooltipster-ns");
            if (1 === e.length) {
                var n = null;
                "previous" === t.options.restoration ? n = t.$el.data("tooltipster-initialTitle") : "current" === t.options.restoration && (n = "string" == typeof t.Content ? t.Content : G("<div></div>").append(t.Content).html()), n && t.$el.attr("title", n), t.$el.removeClass("tooltipstered").removeData("tooltipster-ns").removeData("tooltipster-initialTitle")
            } else e = G.grep(e, function(e) {
                return e !== t.namespace
            }), t.$el.data("tooltipster-ns", e);
            return t
        },
        elementIcon: function() {
            return this.$el[0] !== this.$elProxy[0] ? this.$elProxy[0] : undefined
        },
        elementTooltip: function() {
            return this.$tooltip ? this.$tooltip[0] : undefined
        },
        option: function(e, t) {
            return void 0 === t ? this.options[e] : (this.options[e] = t, this)
        },
        status: function() {
            return this.Status
        }
    }, G.fn[e] = function() {
        var i = arguments;
        if (0 === this.length) {
            if ("string" == typeof i[0]) {
                var e = !0;
                switch (i[0]) {
                    case "setDefaults":
                        G.extend(c, i[1]);
                        break;
                    default:
                        e = !1
                }
                return !!e || this
            }
            return this
        }
        if ("string" == typeof i[0]) {
            var o = "#*$~&";
            return this.each(function() {
                var e = G(this).data("tooltipster-ns"),
                    t = e ? G(this).data(e[0]) : null;
                if (!t) throw new Error("You called Tooltipster's \"" + i[0] + '" method on an uninitialized element');
                if ("function" != typeof t[i[0]]) throw new Error('Unknown method .tooltipster("' + i[0] + '")');
                var n = t[i[0]](i[1], i[2]);
                if (n !== t) return o = n, !1
            }), "#*$~&" !== o ? o : this
        }
        var r = [],
            t = i[0] && "undefined" != typeof i[0].multiple,
            a = t && i[0].multiple || !t && c.multiple,
            n = i[0] && "undefined" != typeof i[0].debug,
            s = n && i[0].debug || !n && c.debug;
        return this.each(function() {
            var e = !1,
                t = G(this).data("tooltipster-ns"),
                n = null;
            t ? a ? e = !0 : s && console.log('Tooltipster: one or more tooltips are already attached to this element: ignoring. Use the "multiple" option to attach more tooltips.') : e = !0, e && (n = new l(this, i[0]), t || (t = []), t.push(n.namespace), G(this).data("tooltipster-ns", t), G(this).data(n.namespace, n)), r.push(n)
        }), a ? r : this
    };
    var d = !! ("ontouchstart" in W),
        t = !1;
    G("body").one("mousemove", function() {
        t = !0
    })
}(jQuery, window, document), function(e) {
    "function" == typeof define && define.amd ? define(["jquery"], e) : "object" == typeof module && module.exports ? module.exports = e(require("jquery")) : e(jQuery)
}(function(u) {
    u.extend(u.fn, {
        validate: function(e) {
            if (this.length) {
                var i = u.data(this[0], "validator");
                return i || (this.attr("novalidate", "novalidate"), i = new u.validator(e, this[0]), u.data(this[0], "validator", i), i.settings.onsubmit && (this.on("click.validate", ":submit", function(e) {
                        i.settings.submitHandler && (i.submitButton = e.target), u(this).hasClass("cancel") && (i.cancelSubmit = !0), void 0 !== u(this).attr("formnovalidate") && (i.cancelSubmit = !0)
                    }), this.on("submit.validate", function(n) {
                        function e() {
                            var e, t;
                            return !i.settings.submitHandler || (i.submitButton && (e = u("<input type='hidden'/>").attr("name", i.submitButton.name).val(u(i.submitButton).val()).appendTo(i.currentForm)), t = i.settings.submitHandler.call(i, i.currentForm, n), i.submitButton && e.remove(), void 0 !== t && t)
                        }
                        return i.settings.debug && n.preventDefault(), i.cancelSubmit ? (i.cancelSubmit = !1, e()) : i.form() ? i.pendingRequest ? (i.formSubmitted = !0, !1) : e() : (i.focusInvalid(), !1)
                    })), i)
            }
            e && e.debug && window.console && console.warn("Nothing selected, can't validate, returning nothing.")
        },
        valid: function() {
            var e, t, n;
            return u(this[0]).is("form") ? e = this.validate().form() : (n = [], e = !0, t = u(this[0].form).validate(), this.each(function() {
                (e = t.element(this) && e) || (n = n.concat(t.errorList))
            }), t.errorList = n), e
        },
        rules: function(e, t) {
            if (this.length) {
                var n, i, o, r, a, s, l = this[0];
                if (e) switch (n = u.data(l.form, "validator").settings, i = n.rules, o = u.validator.staticRules(l), e) {
                    case "add":
                        u.extend(o, u.validator.normalizeRule(t)), delete o.messages, i[l.name] = o, t.messages && (n.messages[l.name] = u.extend(n.messages[l.name], t.messages));
                        break;
                    case "remove":
                        return t ? (s = {}, u.each(t.split(/\s/), function(e, t) {
                            s[t] = o[t], delete o[t], "required" === t && u(l).removeAttr("aria-required")
                        }), s) : (delete i[l.name], o)
                }
                return (r = u.validator.normalizeRules(u.extend({}, u.validator.classRules(l), u.validator.attributeRules(l), u.validator.dataRules(l), u.validator.staticRules(l)), l)).required && (a = r.required, delete r.required, r = u.extend({
                    required: a
                }, r), u(l).attr("aria-required", "true")), r.remote && (a = r.remote, delete r.remote, r = u.extend(r, {
                    remote: a
                })), r
            }
        }
    }), u.extend(u.expr[":"], {
        blank: function(e) {
            return !u.trim("" + u(e).val())
        },
        filled: function(e) {
            var t = u(e).val();
            return null !== t && !! u.trim("" + t)
        },
        unchecked: function(e) {
            return !u(e).prop("checked")
        }
    }), u.validator = function(e, t) {
        this.settings = u.extend(!0, {}, u.validator.defaults, e), this.currentForm = t, this.init()
    }, u.validator.format = function(n, e) {
        return 1 === arguments.length ?
            function() {
                var e = u.makeArray(arguments);
                return e.unshift(n), u.validator.format.apply(this, e)
            } : (void 0 === e || (2 < arguments.length && e.constructor !== Array && (e = u.makeArray(arguments).slice(1)), e.constructor !== Array && (e = [e]), u.each(e, function(e, t) {
                n = n.replace(new RegExp("\\{" + e + "\\}", "g"), function() {
                    return t
                })
            })), n)
    }, u.extend(u.validator, {
        defaults: {
            messages: {},
            groups: {},
            rules: {},
            errorClass: "error",
            pendingClass: "pending",
            validClass: "valid",
            errorElement: "label",
            focusCleanup: !1,
            focusInvalid: !0,
            errorContainer: u([]),
            errorLabelContainer: u([]),
            onsubmit: !0,
            ignore: ":hidden",
            ignoreTitle: !1,
            onfocusin: function(e) {
                this.lastActive = e, this.settings.focusCleanup && (this.settings.unhighlight && this.settings.unhighlight.call(this, e, this.settings.errorClass, this.settings.validClass), this.hideThese(this.errorsFor(e)))
            },
            onfocusout: function(e) {
                this.checkable(e) || !(e.name in this.submitted) && this.optional(e) || this.element(e)
            },
            onkeyup: function(e, t) {
                var n = [16, 17, 18, 20, 35, 36, 37, 38, 39, 40, 45, 144, 225];
                9 === t.which && "" === this.elementValue(e) || -1 !== u.inArray(t.keyCode, n) || (e.name in this.submitted || e.name in this.invalid) && this.element(e)
            },
            onclick: function(e) {
                e.name in this.submitted ? this.element(e) : e.parentNode.name in this.submitted && this.element(e.parentNode)
            },
            highlight: function(e, t, n) {
                "radio" === e.type ? this.findByName(e.name).addClass(t).removeClass(n) : u(e).addClass(t).removeClass(n)
            },
            unhighlight: function(e, t, n) {
                "radio" === e.type ? this.findByName(e.name).removeClass(t).addClass(n) : u(e).removeClass(t).addClass(n)
            }
        },
        setDefaults: function(e) {
            u.extend(u.validator.defaults, e)
        },
        messages: {
            required: "This field is required.",
            remote: "Please fix this field.",
            email: "Please enter a valid email address.",
            url: "Please enter a valid URL.",
            date: "Please enter a valid date.",
            dateISO: "Please enter a valid date ( ISO ).",
            number: "Please enter a valid number.",
            digits: "Please enter only digits.",
            equalTo: "Please enter the same value again.",
            maxlength: u.validator.format("Please enter no more than {0} characters."),
            minlength: u.validator.format("Please enter at least {0} characters."),
            rangelength: u.validator.format("Please enter a value between {0} and {1} characters long."),
            range: u.validator.format("Please enter a value between {0} and {1}."),
            max: u.validator.format("Please enter a value less than or equal to {0}."),
            min: u.validator.format("Please enter a value greater than or equal to {0}."),
            step: u.validator.format("Please enter a multiple of {0}.")
        },
        autoCreateRanges: !1,
        prototype: {
            init: function() {
                function e(e) {
                    var t = u.data(this.form, "validator"),
                        n = "on" + e.type.replace(/^validate/, ""),
                        i = t.settings;
                    i[n] && !u(this).is(i.ignore) && i[n].call(t, this, e)
                }
                this.labelContainer = u(this.settings.errorLabelContainer), this.errorContext = this.labelContainer.length && this.labelContainer || u(this.currentForm), this.containers = u(this.settings.errorContainer).add(this.settings.errorLabelContainer), this.submitted = {}, this.valueCache = {}, this.pendingRequest = 0, this.pending = {}, this.invalid = {}, this.reset();
                var n, i = this.groups = {};
                u.each(this.settings.groups, function(n, e) {
                    "string" == typeof e && (e = e.split(/\s/)), u.each(e, function(e, t) {
                        i[t] = n
                    })
                }), n = this.settings.rules, u.each(n, function(e, t) {
                    n[e] = u.validator.normalizeRule(t)
                }), u(this.currentForm).on("focusin.validate focusout.validate keyup.validate", ":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], [type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], [type='radio'], [type='checkbox'], [contenteditable]", e).on("click.validate", "select, option, [type='radio'], [type='checkbox']", e), this.settings.invalidHandler && u(this.currentForm).on("invalid-form.validate", this.settings.invalidHandler), u(this.currentForm).find("[required], [data-rule-required], .required").attr("aria-required", "true")
            },
            form: function() {
                return this.checkForm(), u.extend(this.submitted, this.errorMap), this.invalid = u.extend({}, this.errorMap), this.valid() || u(this.currentForm).triggerHandler("invalid-form", [this]), this.showErrors(), this.valid()
            },
            checkForm: function() {
                this.prepareForm();
                for (var e = 0, t = this.currentElements = this.elements(); t[e]; e++) this.check(t[e]);
                return this.valid()
            },
            element: function(e) {
                var t, n, i = this.clean(e),
                    o = this.validationTargetFor(i),
                    r = this,
                    a = !0;
                return void 0 === o ? delete this.invalid[i.name] : (this.prepareElement(o), this.currentElements = u(o), (n = this.groups[o.name]) && u.each(this.groups, function(e, t) {
                    t === n && e !== o.name && ((i = r.validationTargetFor(r.clean(r.findByName(e)))) && i.name in r.invalid && (r.currentElements.push(i), a = a && r.check(i)))
                }), t = !1 !== this.check(o), a = a && t, this.invalid[o.name] = !t, this.numberOfInvalids() || (this.toHide = this.toHide.add(this.containers)), this.showErrors(), u(e).attr("aria-invalid", !t)), a
            },
            showErrors: function(t) {
                if (t) {
                    var n = this;
                    u.extend(this.errorMap, t), this.errorList = u.map(this.errorMap, function(e, t) {
                        return {
                            message: e,
                            element: n.findByName(t)[0]
                        }
                    }), this.successList = u.grep(this.successList, function(e) {
                        return !(e.name in t)
                    })
                }
                this.settings.showErrors ? this.settings.showErrors.call(this, this.errorMap, this.errorList) : this.defaultShowErrors()
            },
            resetForm: function() {
                u.fn.resetForm && u(this.currentForm).resetForm(), this.invalid = {}, this.submitted = {}, this.prepareForm(), this.hideErrors();
                var e = this.elements().removeData("previousValue").removeAttr("aria-invalid");
                this.resetElements(e)
            },
            resetElements: function(e) {
                var t;
                if (this.settings.unhighlight) for (t = 0; e[t]; t++) this.settings.unhighlight.call(this, e[t], this.settings.errorClass, ""), this.findByName(e[t].name).removeClass(this.settings.validClass);
                else e.removeClass(this.settings.errorClass).removeClass(this.settings.validClass)
            },
            numberOfInvalids: function() {
                return this.objectLength(this.invalid)
            },
            objectLength: function(e) {
                var t, n = 0;
                for (t in e) e[t] && n++;
                return n
            },
            hideErrors: function() {
                this.hideThese(this.toHide)
            },
            hideThese: function(e) {
                e.not(this.containers).text(""), this.addWrapper(e).hide()
            },
            valid: function() {
                return 0 === this.size()
            },
            size: function() {
                return this.errorList.length
            },
            focusInvalid: function() {
                if (this.settings.focusInvalid) try {
                    u(this.findLastActive() || this.errorList.length && this.errorList[0].element || []).filter(":visible").focus().trigger("focusin")
                } catch (i) {}
            },
            findLastActive: function() {
                var t = this.lastActive;
                return t && 1 === u.grep(this.errorList, function(e) {
                        return e.element.name === t.name
                    }).length && t
            },
            elements: function() {
                var t = this,
                    n = {};
                return u(this.currentForm).find("input, select, textarea, [contenteditable]").not(":submit, :reset, :image, :disabled").not(this.settings.ignore).filter(function() {
                    var e = this.name || u(this).attr("name");
                    return !e && t.settings.debug && window.console && console.error("%o has no name assigned", this), this.hasAttribute("contenteditable") && (this.form = u(this).closest("form")[0]), !(e in n || !t.objectLength(u(this).rules())) && (n[e] = !0)
                })
            },
            clean: function(e) {
                return u(e)[0]
            },
            errors: function() {
                var e = this.settings.errorClass.split(" ").join(".");
                return u(this.settings.errorElement + "." + e, this.errorContext)
            },
            resetInternals: function() {
                this.successList = [], this.errorList = [], this.errorMap = {}, this.toShow = u([]), this.toHide = u([])
            },
            reset: function() {
                this.resetInternals(), this.currentElements = u([])
            },
            prepareForm: function() {
                this.reset(), this.toHide = this.errors().add(this.containers)
            },
            prepareElement: function(e) {
                this.reset(), this.toHide = this.errorsFor(e)
            },
            elementValue: function(e) {
                var t, n, i = u(e),
                    o = e.type;
                return "radio" === o || "checkbox" === o ? this.findByName(e.name).filter(":checked").val() : "number" === o && "undefined" != typeof e.validity ? e.validity.badInput ? "NaN" : i.val() : (t = e.hasAttribute("contenteditable") ? i.text() : i.val(), "file" === o ? "C:\\fakepath\\" === t.substr(0, 12) ? t.substr(12) : 0 <= (n = t.lastIndexOf("/")) ? t.substr(n + 1) : 0 <= (n = t.lastIndexOf("\\")) ? t.substr(n + 1) : t : "string" == typeof t ? t.replace(/\r/g, "") : t)
            },
            check: function(e) {
                e = this.validationTargetFor(this.clean(e));
                var t, n, i, o = u(e).rules(),
                    r = u.map(o, function(e, t) {
                        return t
                    }).length,
                    a = !1,
                    s = this.elementValue(e);
                if ("function" == typeof o.normalizer) {
                    if ("string" != typeof(s = o.normalizer.call(e, s))) throw new TypeError("The normalizer should return a string value.");
                    delete o.normalizer
                }
                for (n in o) {
                    i = {
                        method: n,
                        parameters: o[n]
                    };
                    try {
                        if ("dependency-mismatch" === (t = u.validator.methods[n].call(this, s, e, i.parameters)) && 1 === r) {
                            a = !0;
                            continue
                        }
                        if (a = !1, "pending" === t) return void(this.toHide = this.toHide.not(this.errorsFor(e)));
                        if (!t) return this.formatAndAdd(e, i), !1
                    } catch (l) {
                        throw this.settings.debug && window.console && console.log("Exception occurred when checking element " + e.id + ", check the '" + i.method + "' method.", l), l instanceof TypeError && (l.message += ".  Exception occurred when checking element " + e.id + ", check the '" + i.method + "' method."), l
                    }
                }
                if (!a) return this.objectLength(o) && this.successList.push(e), !0
            },
            customDataMessage: function(e, t) {
                return u(e).data("msg" + t.charAt(0).toUpperCase() + t.substring(1).toLowerCase()) || u(e).data("msg")
            },
            customMessage: function(e, t) {
                var n = this.settings.messages[e];
                return n && (n.constructor === String ? n : n[t])
            },
            findDefined: function() {
                for (var e = 0; e < arguments.length; e++) if (void 0 !== arguments[e]) return arguments[e]
            },
            defaultMessage: function(e, t) {
                var n = this.findDefined(this.customMessage(e.name, t.method), this.customDataMessage(e, t.method), !this.settings.ignoreTitle && e.title || void 0, u.validator.messages[t.method], "<strong>Warning: No message defined for " + e.name + "</strong>"),
                    i = /\$?\{(\d+)\}/g;
                return "function" == typeof n ? n = n.call(this, t.parameters, e) : i.test(n) && (n = u.validator.format(n.replace(i, "{$1}"), t.parameters)), n
            },
            formatAndAdd: function(e, t) {
                var n = this.defaultMessage(e, t);
                this.errorList.push({
                    message: n,
                    element: e,
                    method: t.method
                }), this.errorMap[e.name] = n, this.submitted[e.name] = n
            },
            addWrapper: function(e) {
                return this.settings.wrapper && (e = e.add(e.parent(this.settings.wrapper))), e
            },
            defaultShowErrors: function() {
                var e, t, n;
                for (e = 0; this.errorList[e]; e++) n = this.errorList[e], this.settings.highlight && this.settings.highlight.call(this, n.element, this.settings.errorClass, this.settings.validClass), this.showLabel(n.element, n.message);
                if (this.errorList.length && (this.toShow = this.toShow.add(this.containers)), this.settings.success) for (e = 0; this.successList[e]; e++) this.showLabel(this.successList[e]);
                if (this.settings.unhighlight) for (e = 0, t = this.validElements(); t[e]; e++) this.settings.unhighlight.call(this, t[e], this.settings.errorClass, this.settings.validClass);
                this.toHide = this.toHide.not(this.toShow), this.hideErrors(), this.addWrapper(this.toShow).show()
            },
            validElements: function() {
                return this.currentElements.not(this.invalidElements())
            },
            invalidElements: function() {
                return u(this.errorList).map(function() {
                    return this.element
                })
            },
            showLabel: function(e, t) {
                var n, i, o, r, a = this.errorsFor(e),
                    s = this.idOrName(e),
                    l = u(e).attr("aria-describedby");
                a.length ? (a.removeClass(this.settings.validClass).addClass(this.settings.errorClass), a.html(t)) : (n = a = u("<" + this.settings.errorElement + ">").attr("id", s + "-error").addClass(this.settings.errorClass).html(t || ""), this.settings.wrapper && (n = a.hide().show().wrap("<" + this.settings.wrapper + "/>").parent()), this.labelContainer.length ? this.labelContainer.append(n) : this.settings.errorPlacement ? this.settings.errorPlacement(n, u(e)) : n.insertAfter(e), a.is("label") ? a.attr("for", s) : 0 === a.parents("label[for='" + this.escapeCssMeta(s) + "']").length && (o = a.attr("id"), l ? l.match(new RegExp("\\b" + this.escapeCssMeta(o) + "\\b")) || (l += " " + o) : l = o, u(e).attr("aria-describedby", l), (i = this.groups[e.name]) && (r = this, u.each(r.groups, function(e, t) {
                        t === i && u("[name='" + r.escapeCssMeta(e) + "']", r.currentForm).attr("aria-describedby", a.attr("id"))
                    })))), !t && this.settings.success && (a.text(""), "string" == typeof this.settings.success ? a.addClass(this.settings.success) : this.settings.success(a, e)), this.toShow = this.toShow.add(a)
            },
            errorsFor: function(e) {
                var t = this.escapeCssMeta(this.idOrName(e)),
                    n = u(e).attr("aria-describedby"),
                    i = "label[for='" + t + "'], label[for='" + t + "'] *";
                return n && (i = i + ", #" + this.escapeCssMeta(n).replace(/\s+/g, ", #")), this.errors().filter(i)
            },
            escapeCssMeta: function(e) {
                return e.replace(/([\\!"#$%&'()*+,./:;<=>?@\[\]^`{|}~])/g, "\\$1")
            },
            idOrName: function(e) {
                return this.groups[e.name] || (this.checkable(e) ? e.name : e.id || e.name)
            },
            validationTargetFor: function(e) {
                return this.checkable(e) && (e = this.findByName(e.name)), u(e).not(this.settings.ignore)[0]
            },
            checkable: function(e) {
                return /radio|checkbox/i.test(e.type)
            },
            findByName: function(e) {
                return u(this.currentForm).find("[name='" + this.escapeCssMeta(e) + "']")
            },
            getLength: function(e, t) {
                switch (t.nodeName.toLowerCase()) {
                    case "select":
                        return u("option:selected", t).length;
                    case "input":
                        if (this.checkable(t)) return this.findByName(t.name).filter(":checked").length
                }
                return e.length
            },
            depend: function(e, t) {
                return !this.dependTypes[typeof e] || this.dependTypes[typeof e](e, t)
            },
            dependTypes: {
                "boolean": function(e) {
                    return e
                },
                string: function(e, t) {
                    return !!u(e, t.form).length
                },
                "function": function(e, t) {
                    return e(t)
                }
            },
            optional: function(e) {
                var t = this.elementValue(e);
                return !u.validator.methods.required.call(this, t, e) && "dependency-mismatch"
            },
            startRequest: function(e) {
                this.pending[e.name] || (this.pendingRequest++, u(e).addClass(this.settings.pendingClass), this.pending[e.name] = !0)
            },
            stopRequest: function(e, t) {
                this.pendingRequest--, this.pendingRequest < 0 && (this.pendingRequest = 0), delete this.pending[e.name], u(e).removeClass(this.settings.pendingClass), t && 0 === this.pendingRequest && this.formSubmitted && this.form() ? (u(this.currentForm).submit(), this.formSubmitted = !1) : !t && 0 === this.pendingRequest && this.formSubmitted && (u(this.currentForm).triggerHandler("invalid-form", [this]), this.formSubmitted = !1)
            },
            previousValue: function(e, t) {
                return u.data(e, "previousValue") || u.data(e, "previousValue", {
                        old: null,
                        valid: !0,
                        message: this.defaultMessage(e, {
                            method: t
                        })
                    })
            },
            destroy: function() {
                this.resetForm(), u(this.currentForm).off(".validate").removeData("validator").find(".validate-equalTo-blur").off(".validate-equalTo").removeClass("validate-equalTo-blur")
            }
        },
        classRuleSettings: {
            required: {
                required: !0
            },
            email: {
                email: !0
            },
            url: {
                url: !0
            },
            date: {
                date: !0
            },
            dateISO: {
                dateISO: !0
            },
            number: {
                number: !0
            },
            digits: {
                digits: !0
            },
            creditcard: {
                creditcard: !0
            }
        },
        addClassRules: function(e, t) {
            e.constructor === String ? this.classRuleSettings[e] = t : u.extend(this.classRuleSettings, e)
        },
        classRules: function(e) {
            var t = {},
                n = u(e).attr("class");
            return n && u.each(n.split(" "), function() {
                this in u.validator.classRuleSettings && u.extend(t, u.validator.classRuleSettings[this])
            }), t
        },
        normalizeAttributeRule: function(e, t, n, i) {
            /min|max|step/.test(n) && (null === t || /number|range|text/.test(t)) && (i = Number(i), isNaN(i) && (i = void 0)), i || 0 === i ? e[n] = i : t === n && "range" !== t && (e[n] = !0)
        },
        attributeRules: function(e) {
            var t, n, i = {},
                o = u(e),
                r = e.getAttribute("type");
            for (t in u.validator.methods)"required" === t ? ("" === (n = e.getAttribute(t)) && (n = !0), n = !! n) : n = o.attr(t), this.normalizeAttributeRule(i, r, t, n);
            return i.maxlength && /-1|2147483647|524288/.test(i.maxlength) && delete i.maxlength, i
        },
        dataRules: function(e) {
            var t, n, i = {},
                o = u(e),
                r = e.getAttribute("type");
            for (t in u.validator.methods) n = o.data("rule" + t.charAt(0).toUpperCase() + t.substring(1).toLowerCase()), this.normalizeAttributeRule(i, r, t, n);
            return i
        },
        staticRules: function(e) {
            var t = {},
                n = u.data(e.form, "validator");
            return n.settings.rules && (t = u.validator.normalizeRule(n.settings.rules[e.name]) || {}), t
        },
        normalizeRules: function(i, o) {
            return u.each(i, function(e, t) {
                if (!1 !== t) {
                    if (t.param || t.depends) {
                        var n = !0;
                        switch (typeof t.depends) {
                            case "string":
                                n = !! u(t.depends, o.form).length;
                                break;
                            case "function":
                                n = t.depends.call(o, o)
                        }
                        n ? i[e] = void 0 === t.param || t.param : (u.data(o.form, "validator").resetElements(u(o)), delete i[e])
                    }
                } else delete i[e]
            }), u.each(i, function(e, t) {
                i[e] = u.isFunction(t) && "normalizer" !== e ? t(o) : t
            }), u.each(["minlength", "maxlength"], function() {
                i[this] && (i[this] = Number(i[this]))
            }), u.each(["rangelength", "range"], function() {
                var e;
                i[this] && (u.isArray(i[this]) ? i[this] = [Number(i[this][0]), Number(i[this][1])] : "string" == typeof i[this] && (e = i[this].replace(/[\[\]]/g, "").split(/[\s,]+/), i[this] = [Number(e[0]), Number(e[1])]))
            }), u.validator.autoCreateRanges && (null != i.min && null != i.max && (i.range = [i.min, i.max], delete i.min, delete i.max), null != i.minlength && null != i.maxlength && (i.rangelength = [i.minlength, i.maxlength], delete i.minlength, delete i.maxlength)), i
        },
        normalizeRule: function(e) {
            if ("string" == typeof e) {
                var t = {};
                u.each(e.split(/\s/), function() {
                    t[this] = !0
                }), e = t
            }
            return e
        },
        addMethod: function(e, t, n) {
            u.validator.methods[e] = t, u.validator.messages[e] = void 0 !== n ? n : u.validator.messages[e], t.length < 3 && u.validator.addClassRules(e, u.validator.normalizeRule(e))
        },
        methods: {
            required: function(e, t, n) {
                if (!this.depend(n, t)) return "dependency-mismatch";
                if ("select" === t.nodeName.toLowerCase()) {
                    var i = u(t).val();
                    return i && 0 < i.length
                }
                return this.checkable(t) ? 0 < this.getLength(e, t) : 0 < e.length
            },
            email: function(e, t) {
                return this.optional(t) || /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(e)
            },
            url: function(e, t) {
                return this.optional(t) || /^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/i.test(e)
            },
            date: function(e, t) {
                return this.optional(t) || !/Invalid|NaN/.test(new Date(e).toString())
            },
            dateISO: function(e, t) {
                return this.optional(t) || /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(e)
            },
            number: function(e, t) {
                return this.optional(t) || /^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(e)
            },
            digits: function(e, t) {
                return this.optional(t) || /^\d+$/.test(e)
            },
            minlength: function(e, t, n) {
                var i = u.isArray(e) ? e.length : this.getLength(e, t);
                return this.optional(t) || n <= i
            },
            maxlength: function(e, t, n) {
                var i = u.isArray(e) ? e.length : this.getLength(e, t);
                return this.optional(t) || i <= n
            },
            rangelength: function(e, t, n) {
                var i = u.isArray(e) ? e.length : this.getLength(e, t);
                return this.optional(t) || i >= n[0] && i <= n[1]
            },
            min: function(e, t, n) {
                return this.optional(t) || n <= e
            },
            max: function(e, t, n) {
                return this.optional(t) || e <= n
            },
            range: function(e, t, n) {
                return this.optional(t) || e >= n[0] && e <= n[1]
            },
            step: function(e, t, n) {
                var i = u(t).attr("type"),
                    o = "Step attribute on input type " + i + " is not supported.",
                    r = ["text", "number", "range"],
                    a = new RegExp("\\b" + i + "\\b");
                if (i && !a.test(r.join())) throw new Error(o);
                return this.optional(t) || e % n == 0
            },
            equalTo: function(e, t, n) {
                var i = u(n);
                return this.settings.onfocusout && i.not(".validate-equalTo-blur").length && i.addClass("validate-equalTo-blur").on("blur.validate-equalTo", function() {
                    u(t).valid()
                }), e === i.val()
            },
            remote: function(r, a, e, s) {
                if (this.optional(a)) return "dependency-mismatch";
                s = "string" == typeof s && s || "remote";
                var l, t, n, c = this.previousValue(a, s);
                return this.settings.messages[a.name] || (this.settings.messages[a.name] = {}), c.originalMessage = c.originalMessage || this.settings.messages[a.name][s], this.settings.messages[a.name][s] = c.message, e = "string" == typeof e && {
                        url: e
                    } || e, n = u.param(u.extend({
                    data: r
                }, e.data)), c.old === n ? c.valid : (c.old = n, (l = this).startRequest(a), (t = {})[a.name] = r, u.ajax(u.extend(!0, {
                    mode: "abort",
                    port: "validate" + a.name,
                    dataType: "json",
                    data: t,
                    context: l.currentForm,
                    success: function(e) {
                        var t, n, i, o = !0 === e || "true" === e;
                        l.settings.messages[a.name][s] = c.originalMessage, o ? (i = l.formSubmitted, l.resetInternals(), l.toHide = l.errorsFor(a), l.formSubmitted = i, l.successList.push(a), l.invalid[a.name] = !1, l.showErrors()) : (t = {}, n = e || l.defaultMessage(a, {
                                method: s,
                                parameters: r
                            }), t[a.name] = c.message = n, l.invalid[a.name] = !0, l.showErrors(t)), c.valid = o, l.stopRequest(a, o)
                    }
                }, e)), "pending")
            }
        }
    });
    var i, o = {};
    u.ajaxPrefilter ? u.ajaxPrefilter(function(e, t, n) {
        var i = e.port;
        "abort" === e.mode && (o[i] && o[i].abort(), o[i] = n)
    }) : (i = u.ajax, u.ajax = function(e) {
        var t = ("mode" in e ? e : u.ajaxSettings).mode,
            n = ("port" in e ? e : u.ajaxSettings).port;
        return "abort" === t ? (o[n] && o[n].abort(), o[n] = i.apply(this, arguments), o[n]) : i.apply(this, arguments)
    })
}), $.extend($.validator.prototype, {
    startRequest: function(e) {
        this.pending[e.name] || (this.pendingRequest++, $(e).addClass(this.settings.pendingClass), $(e).closest(".field").addClass(this.settings.pendingClass), this.pending[e.name] = !0)
    },
    stopRequest: function(e, t) {
        this.pendingRequest--, this.pendingRequest < 0 && (this.pendingRequest = 0), delete this.pending[e.name], $(e).removeClass(this.settings.pendingClass), $(e).closest(".field").removeClass(this.settings.pendingClass), t && 0 === this.pendingRequest && this.formSubmitted && this.form() ? ($(this.currentForm).submit(), this.formSubmitted = !1) : !t && 0 === this.pendingRequest && this.formSubmitted && ($(this.currentForm).triggerHandler("invalid-form", [this]), this.formSubmitted = !1)
    }
}), $.extend($.validator.messages, {
    required: "\u8fd9\u662f\u5fc5\u586b\u5b57\u6bb5",
    remote: "\u8bf7\u4fee\u6b63\u6b64\u5b57\u6bb5",
    email: "\u8bf7\u8f93\u5165\u6709\u6548\u7684\u7535\u5b50\u90ae\u4ef6\u5730\u5740",
    url: "\u8bf7\u8f93\u5165\u6709\u6548\u7684\u7f51\u5740",
    date: "\u8bf7\u8f93\u5165\u6709\u6548\u7684\u65e5\u671f",
    dateISO: "\u8bf7\u8f93\u5165\u6709\u6548\u7684\u65e5\u671f (YYYY-MM-DD)",
    number: "\u8bf7\u8f93\u5165\u6709\u6548\u7684\u6570\u5b57",
    digits: "\u53ea\u80fd\u8f93\u5165\u6570\u5b57",
    creditcard: "\u8bf7\u8f93\u5165\u6709\u6548\u7684\u4fe1\u7528\u5361\u53f7\u7801",
    equalTo: "\u4f60\u7684\u8f93\u5165\u4e0d\u76f8\u540c",
    extension: "\u8bf7\u8f93\u5165\u6709\u6548\u7684\u540e\u7f00",
    maxlength: $.validator.format("\u6700\u591a\u53ef\u4ee5\u8f93\u5165 {0} \u4e2a\u5b57"),
    minlength: $.validator.format("\u6700\u5c11\u8981\u8f93\u5165 {0} \u4e2a\u5b57"),
    rangelength: $.validator.format("\u8bf7\u8f93\u5165\u957f\u5ea6\u5728 {0} \u5230 {1} \u4e4b\u95f4\u7684\u5b57\u7b26\u4e32"),
    range: $.validator.format("\u8bf7\u8f93\u5165\u8303\u56f4\u5728 {0} \u5230 {1} \u4e4b\u95f4\u7684\u6570\u503c"),
    max: $.validator.format("\u8bf7\u8f93\u5165\u5c0f\u4e8e\u7b49\u4e8e {0} \u7684\u6570\u5b57"),
    min: $.validator.format("\u8bf7\u8f93\u5165\u5927\u4e8e\u7b49\u4e8e {0} \u7684\u6570\u5b57")
}), function(e) {
    "function" == typeof define && define.amd ? define(["jquery"], e) : e("undefined" != typeof jQuery ? jQuery : window.Zepto)
}(function($) {
    "use strict";

    function n(e) {
        var t = e.data;
        e.isDefaultPrevented() || (e.preventDefault(), $(e.target).ajaxSubmit(t))
    }
    function i(e) {
        var t = e.target,
            n = $(t);
        if (!n.is("[type=submit],[type=image]")) {
            var i = n.closest("[type=submit]");
            if (0 === i.length) return;
            t = i[0]
        }
        var o = this;
        if ("image" == (o.clk = t).type) if (e.offsetX !== undefined) o.clk_x = e.offsetX, o.clk_y = e.offsetY;
        else if ("function" == typeof $.fn.offset) {
            var r = n.offset();
            o.clk_x = e.pageX - r.left, o.clk_y = e.pageY - r.top
        } else o.clk_x = e.pageX - t.offsetLeft, o.clk_y = e.pageY - t.offsetTop;
        setTimeout(function() {
            o.clk = o.clk_x = o.clk_y = null
        }, 100)
    }
    function A() {
        if ($.fn.ajaxSubmit.debug) {
            var e = "[jquery.form] " + Array.prototype.join.call(arguments, "");
            window.console && window.console.log ? window.console.log(e) : window.opera && window.opera.postError && window.opera.postError(e)
        }
    }
    var w = {};
    w.fileapi = $("<input type='file'/>").get(0).files !== undefined, w.formdata = window.FormData !== undefined;
    var j = !! $.fn.prop;
    $.fn.attr2 = function() {
        if (!j) return this.attr.apply(this, arguments);
        var e = this.prop.apply(this, arguments);
        return e && e.jquery || "string" == typeof e ? e : this.attr.apply(this, arguments)
    }, $.fn.ajaxSubmit = function(I) {
        function a(e) {
            var t, n, i = $.param(e, I.traditional).split("&"),
                o = i.length,
                r = [];
            for (t = 0; t < o; t++) i[t] = i[t].replace(/\+/g, " "), n = i[t].split("="), r.push([decodeURIComponent(n[0]), decodeURIComponent(n[1])]);
            return r
        }
        function e(e) {
            for (var n = new FormData, t = 0; t < e.length; t++) n.append(e[t].name, e[t].value);
            if (I.extraData) {
                var i = a(I.extraData);
                for (t = 0; t < i.length; t++) i[t] && n.append(i[t][0], i[t][1])
            }
            I.data = null;
            var o = $.extend(!0, {}, $.ajaxSettings, I, {
                contentType: !1,
                processData: !1,
                cache: !1,
                type: N || "POST"
            });
            I.uploadProgress && (o.xhr = function() {
                var e = $.ajaxSettings.xhr();
                return e.upload && e.upload.addEventListener("progress", function(e) {
                    var t = 0,
                        n = e.loaded || e.position,
                        i = e.total;
                    e.lengthComputable && (t = Math.ceil(n / i * 100)), I.uploadProgress(e, n, i, t)
                }, !1), e
            }), o.data = null;
            var r = o.beforeSend;
            return o.beforeSend = function(e, t) {
                I.formData ? t.data = I.formData : t.data = n, r && r.call(this, e, t)
            }, $.ajax(o)
        }
        function t(e) {
            function d(e) {
                var t = null;
                try {
                    e.contentWindow && (t = e.contentWindow.document)
                } catch (n) {
                    A("cannot get iframe.contentWindow document: " + n)
                }
                if (t) return t;
                try {
                    t = e.contentDocument ? e.contentDocument : e.document
                } catch (n) {
                    A("cannot get iframe.contentDocument: " + n), t = e.document
                }
                return t
            }
            function t() {
                function n() {
                    try {
                        var e = d(_).readyState;
                        A("state = " + e), e && "uninitialized" == e.toLowerCase() && setTimeout(n, 50)
                    } catch (t) {
                        A("Server abort: ", t, " (", t.name, ")"), f(x), y && clearTimeout(y), y = undefined
                    }
                }
                var e = M.attr2("target"),
                    t = M.attr2("action");
                l.setAttribute("target", s), N && !/post/i.test(N) || l.setAttribute("method", "POST"), t != h.url && l.setAttribute("action", h.url), h.skipEncodingOverride || N && !/post/i.test(N) || M.attr({
                    encoding: "multipart/form-data",
                    enctype: "multipart/form-data"
                }), h.timeout && (y = setTimeout(function() {
                    v = !0, f(w)
                }, h.timeout));
                var i = [];
                try {
                    if (h.extraData) for (var o in h.extraData) h.extraData.hasOwnProperty(o) && ($.isPlainObject(h.extraData[o]) && h.extraData[o].hasOwnProperty("name") && h.extraData[o].hasOwnProperty("value") ? i.push($('<input type="hidden" name="' + h.extraData[o].name + '">').val(h.extraData[o].value).appendTo(l)[0]) : i.push($('<input type="hidden" name="' + o + '">').val(h.extraData[o]).appendTo(l)[0]));
                    h.iframeTarget || m.appendTo("body"), _.attachEvent ? _.attachEvent("onload", f) : _.addEventListener("load", f, !1), setTimeout(n, 15);
                    try {
                        l.submit()
                    } catch (a) {
                        var r = document.createElement("form").submit;
                        r.apply(l)
                    }
                } finally {
                    l.setAttribute("action", t), e ? l.setAttribute("target", e) : M.removeAttr("target"), $(i).remove()
                }
            }
            function f(e) {
                if (!g.aborted && !T) {
                    if ((C = d(_)) || (A("cannot access response document"), e = x), e === w && g) return g.abort("timeout"), void b.reject(g, "timeout");
                    if (e == x && g) return g.abort("server abort"), void b.reject(g, "error", "server abort");
                    if (C && C.location.href != h.iframeSrc || v) {
                        _.detachEvent ? _.detachEvent("onload", f) : _.removeEventListener("load", f, !1);
                        var t, n = "success";
                        try {
                            if (v) throw "timeout";
                            var i = "xml" == h.dataType || C.XMLDocument || $.isXMLDoc(C);
                            if (A("isXml=" + i), !i && window.opera && (null === C.body || !C.body.innerHTML) && --S) return A("requeing onLoad callback, DOM not available"), void setTimeout(f, 250);
                            var o = C.body ? C.body : C.documentElement;
                            g.responseText = o ? o.innerHTML : null, g.responseXML = C.XMLDocument ? C.XMLDocument : C, i && (h.dataType = "xml"), g.getResponseHeader = function(e) {
                                return {
                                    "content-type": h.dataType
                                }[e.toLowerCase()]
                            }, o && (g.status = Number(o.getAttribute("status")) || g.status, g.statusText = o.getAttribute("statusText") || g.statusText);
                            var r = (h.dataType || "").toLowerCase(),
                                a = /(json|script|text)/.test(r);
                            if (a || h.textarea) {
                                var s = C.getElementsByTagName("textarea")[0];
                                if (s) g.responseText = s.value, g.status = Number(s.getAttribute("status")) || g.status, g.statusText = s.getAttribute("statusText") || g.statusText;
                                else if (a) {
                                    var l = C.getElementsByTagName("pre")[0],
                                        c = C.getElementsByTagName("body")[0];
                                    l ? g.responseText = l.textContent ? l.textContent : l.innerText : c && (g.responseText = c.textContent ? c.textContent : c.innerText)
                                }
                            } else "xml" == r && !g.responseXML && g.responseText && (g.responseXML = D(g.responseText));
                            try {
                                k = E(g, r, h)
                            } catch (u) {
                                n = "parsererror", g.error = t = u || n
                            }
                        } catch (u) {
                            A("error caught: ", u), n = "error", g.error = t = u || n
                        }
                        g.aborted && (A("upload aborted"), n = null), g.status && (n = 200 <= g.status && g.status < 300 || 304 === g.status ? "success" : "error"), "success" === n ? (h.success && h.success.call(h.context, k, "success", g), b.resolve(g.responseText, "success", g), p && $.event.trigger("ajaxSuccess", [g, h])) : n && (t === undefined && (t = g.statusText), h.error && h.error.call(h.context, g, n, t), b.reject(g, "error", t), p && $.event.trigger("ajaxError", [g, h, t])), p && $.event.trigger("ajaxComplete", [g, h]), p && !--$.active && $.event.trigger("ajaxStop"), h.complete && h.complete.call(h.context, g, n), T = !0, h.timeout && clearTimeout(y), setTimeout(function() {
                            h.iframeTarget ? m.attr("src", h.iframeSrc) : m.remove(), g.responseXML = null
                        }, 100)
                    }
                }
            }
            var n, i, h, p, s, m, _, g, o, r, v, y, l = M[0],
                b = $.Deferred();
            if (b.abort = function(e) {
                    g.abort(e)
                }, e) for (i = 0; i < P.length; i++) n = $(P[i]), j ? n.prop("disabled", !1) : n.removeAttr("disabled");
            if ((h = $.extend(!0, {}, $.ajaxSettings, I)).context = h.context || h, s = "jqFormIO" + (new Date).getTime(), h.iframeTarget ? (r = (m = $(h.iframeTarget)).attr2("name")) ? s = r : m.attr2("name", s) : (m = $('<iframe name="' + s + '" src="' + h.iframeSrc + '" />')).css({
                    position: "absolute",
                    top: "-1000px",
                    left: "-1000px"
                }), _ = m[0], g = {
                    aborted: 0,
                    responseText: null,
                    responseXML: null,
                    status: 0,
                    statusText: "n/a",
                    getAllResponseHeaders: function() {},
                    getResponseHeader: function() {},
                    setRequestHeader: function() {},
                    abort: function(e) {
                        var t = "timeout" === e ? "timeout" : "aborted";
                        A("aborting upload... " + t), this.aborted = 1;
                        try {
                            _.contentWindow.document.execCommand && _.contentWindow.document.execCommand("Stop")
                        } catch (n) {}
                        m.attr("src", h.iframeSrc), g.error = t, h.error && h.error.call(h.context, g, t, e), p && $.event.trigger("ajaxError", [g, h, t]), h.complete && h.complete.call(h.context, g, t)
                    }
                }, (p = h.global) && 0 == $.active++ && $.event.trigger("ajaxStart"), p && $.event.trigger("ajaxSend", [g, h]), h.beforeSend && !1 === h.beforeSend.call(h.context, g, h)) return h.global && $.active--, b.reject(), b;
            if (g.aborted) return b.reject(), b;
            (o = l.clk) && (r = o.name) && !o.disabled && (h.extraData = h.extraData || {}, h.extraData[r] = o.value, "image" == o.type && (h.extraData[r + ".x"] = l.clk_x, h.extraData[r + ".y"] = l.clk_y));
            var w = 1,
                x = 2,
                a = $("meta[name=csrf-token]").attr("content"),
                c = $("meta[name=csrf-param]").attr("content");
            c && a && (h.extraData = h.extraData || {}, h.extraData[c] = a), h.forceSync ? t() : setTimeout(t, 10);
            var k, C, T, S = 50,
                D = $.parseXML ||
                    function(e, t) {
                        return window.ActiveXObject ? ((t = new ActiveXObject("Microsoft.XMLDOM")).async = "false", t.loadXML(e)) : t = (new DOMParser).parseFromString(e, "text/xml"), t && t.documentElement && "parsererror" != t.documentElement.nodeName ? t : null
                    }, u = $.parseJSON ||
                    function(e) {
                        return window.eval("(" + e + ")")
                    }, E = function(e, t, n) {
                    var i = e.getResponseHeader("content-type") || "",
                        o = "xml" === t || !t && 0 <= i.indexOf("xml"),
                        r = o ? e.responseXML : e.responseText;
                    return o && "parsererror" === r.documentElement.nodeName && $.error && $.error("parsererror"), n && n.dataFilter && (r = n.dataFilter(r, t)), "string" == typeof r && ("json" === t || !t && 0 <= i.indexOf("json") ? r = u(r) : ("script" === t || !t && 0 <= i.indexOf("javascript")) && $.globalEval(r)), r
                };
            return b
        }
        if (!this.length) return A("ajaxSubmit: skipping submit process - no element selected"), this;
        var N, n, i, M = this;
        "function" == typeof I ? I = {
            success: I
        } : I === undefined && (I = {}), N = I.type || this.attr2("method"), (i = (i = "string" == typeof(n = I.url || this.attr2("action")) ? $.trim(n) : "") || window.location.href || "") && (i = (i.match(/^([^#]+)/) || [])[1]), I = $.extend(!0, {
            url: i,
            success: $.ajaxSettings.success,
            type: N || $.ajaxSettings.type,
            iframeSrc: /^https/i.test(window.location.href || "") ? "javascript:false" : "about:blank"
        }, I);
        var o = {};
        if (this.trigger("form-pre-serialize", [this, I, o]), o.veto) return A("ajaxSubmit: submit vetoed via form-pre-serialize trigger"), this;
        if (I.beforeSerialize && !1 === I.beforeSerialize(this, I)) return A("ajaxSubmit: submit aborted via beforeSerialize callback"), this;
        var r = I.traditional;
        r === undefined && (r = $.ajaxSettings.traditional);
        var s, P = [],
            l = this.formToArray(I.semantic, P);
        if (I.data && (I.extraData = I.data, s = $.param(I.data, r)), I.beforeSubmit && !1 === I.beforeSubmit(l, this, I)) return A("ajaxSubmit: submit aborted via beforeSubmit callback"), this;
        if (this.trigger("form-submit-validate", [l, this, I, o]), o.veto) return A("ajaxSubmit: submit vetoed via form-submit-validate trigger"), this;
        var c = $.param(l, r);
        s && (c = c ? c + "&" + s : s), "GET" == I.type.toUpperCase() ? (I.url += (0 <= I.url.indexOf("?") ? "&" : "?") + c, I.data = null) : I.data = c;
        var u = [];
        if (I.resetForm && u.push(function() {
                M.resetForm()
            }), I.clearForm && u.push(function() {
                M.clearForm(I.includeHidden)
            }), !I.dataType && I.target) {
            var d = I.success ||
                function() {};
            u.push(function(e) {
                var t = I.replaceTarget ? "replaceWith" : "html";
                $(I.target)[t](e).each(d, arguments)
            })
        } else I.success && u.push(I.success);
        if (I.success = function(e, t, n) {
                for (var i = I.context || this, o = 0, r = u.length; o < r; o++) u[o].apply(i, [e, t, n || M, M])
            }, I.error) {
            var f = I.error;
            I.error = function(e, t, n) {
                var i = I.context || this;
                f.apply(i, [e, t, n, M])
            }
        }
        if (I.complete) {
            var h = I.complete;
            I.complete = function(e, t) {
                var n = I.context || this;
                h.apply(n, [e, t, M])
            }
        }
        var p = 0 < $("input[type=file]:enabled", this).filter(function() {
                    return "" !== $(this).val()
                }).length,
            m = "multipart/form-data",
            _ = M.attr("enctype") == m || M.attr("encoding") == m,
            g = w.fileapi && w.formdata;
        A("fileAPI :" + g);
        var v, y = (p || _) && !g;
        !1 !== I.iframe && (I.iframe || y) ? I.closeKeepAlive ? $.get(I.closeKeepAlive, function() {
            v = t(l)
        }) : v = t(l) : v = (p || _) && g ? e(l) : $.ajax(I), M.removeData("jqxhr").data("jqxhr", v);
        for (var b = 0; b < P.length; b++) P[b] = null;
        return this.trigger("form-submit-notify", [this, I]), this
    }, $.fn.ajaxForm = function(e) {
        if ((e = e || {}).delegation = e.delegation && $.isFunction($.fn.on), !e.delegation && 0 === this.length) {
            var t = {
                s: this.selector,
                c: this.context
            };
            return !$.isReady && t.s ? (A("DOM not ready, queuing ajaxForm"), $(function() {
                $(t.s, t.c).ajaxForm(e)
            })) : A("terminating; zero elements found by selector" + ($.isReady ? "" : " (DOM not ready)")), this
        }
        return e.delegation ? ($(document).off("submit.form-plugin", this.selector, n).off("click.form-plugin", this.selector, i).on("submit.form-plugin", this.selector, e, n).on("click.form-plugin", this.selector, e, i), this) : this.ajaxFormUnbind().bind("submit.form-plugin", e, n).bind("click.form-plugin", e, i)
    }, $.fn.ajaxFormUnbind = function() {
        return this.unbind("submit.form-plugin click.form-plugin")
    }, $.fn.formToArray = function(e, t) {
        var n = [];
        if (0 === this.length) return n;
        var i, o, r, a, s, l, c, u = this[0],
            d = e ? u.getElementsByTagName("*") : u.elements;
        if (!d) return n;
        for (i = 0, l = d.length; i < l; i++) if ((r = (s = d[i]).name) && !s.disabled) if (e && u.clk && "image" == s.type) u.clk == s && (n.push({
            name: r,
            value: $(s).val(),
            type: s.type
        }), n.push({
            name: r + ".x",
            value: u.clk_x
        }, {
            name: r + ".y",
            value: u.clk_y
        }));
        else if ((a = $.fieldValue(s, !0)) && a.constructor == Array) for (t && t.push(s), o = 0, c = a.length; o < c; o++) n.push({
            name: r,
            value: a[o]
        });
        else if (w.fileapi && "file" == s.type) {
            t && t.push(s);
            var f = s.files;
            if (f.length) for (o = 0; o < f.length; o++) n.push({
                name: r,
                value: f[o],
                type: s.type
            });
            else n.push({
                name: r,
                value: "",
                type: s.type
            })
        } else null != a && (t && t.push(s), n.push({
            name: r,
            value: a,
            type: s.type,
            required: s.required
        }));
        if (!e && u.clk) {
            var h = $(u.clk),
                p = h[0];
            (r = p.name) && !p.disabled && "image" == p.type && (n.push({
                name: r,
                value: h.val()
            }), n.push({
                name: r + ".x",
                value: u.clk_x
            }, {
                name: r + ".y",
                value: u.clk_y
            }))
        }
        return n
    }, $.fn.formSerialize = function(e) {
        return $.param(this.formToArray(e))
    }, $.fn.fieldSerialize = function(o) {
        var r = [];
        return this.each(function() {
            var e = this.name;
            if (e) {
                var t = $.fieldValue(this, o);
                if (t && t.constructor == Array) for (var n = 0, i = t.length; n < i; n++) r.push({
                    name: e,
                    value: t[n]
                });
                else null != t && r.push({
                    name: this.name,
                    value: t
                })
            }
        }), $.param(r)
    }, $.fn.fieldValue = function(e) {
        for (var t = [], n = 0, i = this.length; n < i; n++) {
            var o = this[n],
                r = $.fieldValue(o, e);
            null == r || r.constructor == Array && !r.length || (r.constructor == Array ? $.merge(t, r) : t.push(r))
        }
        return t
    }, $.fieldValue = function(e, t) {
        var n = e.name,
            i = e.type,
            o = e.tagName.toLowerCase();
        if (t === undefined && (t = !0), t && (!n || e.disabled || "reset" == i || "button" == i || ("checkbox" == i || "radio" == i) && !e.checked || ("submit" == i || "image" == i) && e.form && e.form.clk != e || "select" == o && -1 == e.selectedIndex)) return null;
        if ("select" == o) {
            var r = e.selectedIndex;
            if (r < 0) return null;
            for (var a = [], s = e.options, l = "select-one" == i, c = l ? r + 1 : s.length, u = l ? r : 0; u < c; u++) {
                var d = s[u];
                if (d.selected) {
                    var f = d.value;
                    if (f || (f = d.attributes && d.attributes.value && !d.attributes.value.specified ? d.text : d.value), l) return f;
                    a.push(f)
                }
            }
            return a
        }
        return $(e).val()
    }, $.fn.clearForm = function(e) {
        return this.each(function() {
            $("input,select,textarea", this).clearFields(e)
        })
    }, $.fn.clearFields = $.fn.clearInputs = function(n) {
        var i = /^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week)$/i;
        return this.each(function() {
            var e = this.type,
                t = this.tagName.toLowerCase();
            i.test(e) || "textarea" == t ? this.value = "" : "checkbox" == e || "radio" == e ? this.checked = !1 : "select" == t ? this.selectedIndex = -1 : "file" == e ? /MSIE/.test(navigator.userAgent) ? $(this).replaceWith($(this).clone(!0)) : $(this).val("") : n && (!0 === n && /hidden/.test(e) || "string" == typeof n && $(this).is(n)) && (this.value = "")
        })
    }, $.fn.resetForm = function() {
        return this.each(function() {
            ("function" == typeof this.reset || "object" == typeof this.reset && !this.reset.nodeType) && this.reset()
        })
    }, $.fn.enable = function(e) {
        return e === undefined && (e = !0), this.each(function() {
            this.disabled = !e
        })
    }, $.fn.selected = function(n) {
        return n === undefined && (n = !0), this.each(function() {
            var e = this.type;
            if ("checkbox" == e || "radio" == e) this.checked = n;
            else if ("option" == this.tagName.toLowerCase()) {
                var t = $(this).parent("select");
                n && t[0] && "select-one" == t[0].type && t.find("option").selected(!1), this.selected = n
            }
        })
    }, $.fn.ajaxSubmit.debug = !1
}), function(i) {
    "use strict";

    function e() {
        var e = document.createElement("bootstrap"),
            t = {
                WebkitTransition: "webkitTransitionEnd",
                MozTransition: "transitionend",
                OTransition: "oTransitionEnd otransitionend",
                transition: "transitionend"
            };
        for (var n in t) if (e.style[n] !== undefined) return {
            end: t[n]
        };
        return !1
    }
    i.fn.emulateTransitionEnd = function(e) {
        var t = !1,
            n = this;
        return i(this).one("bsTransitionEnd", function() {
            t = !0
        }), setTimeout(function() {
            t || i(n).trigger(i.support.transition.end)
        }, e), this
    }, i(function() {
        i.support.transition = e(), i.support.transition && (i.event.special.bsTransitionEnd = {
            bindType: i.support.transition.end,
            delegateType: i.support.transition.end,
            handle: function(e) {
                if (i(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
            }
        })
    })
}(jQuery), function(r) {
    "use strict";

    function e(n) {
        return this.each(function() {
            var e = r(this),
                t = e.data("bs.alert");
            t || e.data("bs.alert", t = new a(this)), "string" == typeof n && t[n].call(e)
        })
    }
    var t = '[data-dismiss="alert"]',
        a = function(e) {
            r(e).on("click", t, this.close)
        };
    a.VERSION = "3.3.7", a.TRANSITION_DURATION = 150, a.prototype.close = function(e) {
        function t() {
            o.detach().trigger("closed.bs.alert").remove()
        }
        var n = r(this),
            i = n.attr("data-target");
        i || (i = (i = n.attr("href")) && i.replace(/.*(?=#[^\s]*$)/, ""));
        var o = r("#" === i ? [] : i);
        e && e.preventDefault(), o.length || (o = n.closest(".alert")), o.trigger(e = r.Event("close.bs.alert")), e.isDefaultPrevented() || (o.removeClass("in"), r.support.transition && o.hasClass("fade") ? o.one("bsTransitionEnd", t).emulateTransitionEnd(a.TRANSITION_DURATION) : t())
    };
    var n = r.fn.alert;
    r.fn.alert = e, r.fn.alert.Constructor = a, r.fn.alert.noConflict = function() {
        return r.fn.alert = n, this
    }, r(document).on("click.bs.alert.data-api", t, a.prototype.close)
}(jQuery), function(r) {
    "use strict";

    function n(i) {
        return this.each(function() {
            var e = r(this),
                t = e.data("bs.button"),
                n = "object" == typeof i && i;
            t || e.data("bs.button", t = new o(this, n)), "toggle" == i ? t.toggle() : i && t.setState(i)
        })
    }
    var o = function(e, t) {
        this.$element = r(e), this.options = r.extend({}, o.DEFAULTS, t), this.isLoading = !1
    };
    o.VERSION = "3.3.7", o.DEFAULTS = {
        loadingText: "loading..."
    }, o.prototype.setState = function(e) {
        var t = "disabled",
            n = this.$element,
            i = n.is("input") ? "val" : "html",
            o = n.data();
        e += "Text", null == o.resetText && n.data("resetText", n[i]()), setTimeout(r.proxy(function() {
            n[i](null == o[e] ? this.options[e] : o[e]), "loadingText" == e ? (this.isLoading = !0, n.addClass(t).attr(t, t).prop(t, !0)) : this.isLoading && (this.isLoading = !1, n.removeClass(t).removeAttr(t).prop(t, !1))
        }, this), 0)
    }, o.prototype.toggle = function() {
        var e = !0,
            t = this.$element.closest('[data-toggle="buttons"]');
        if (t.length) {
            var n = this.$element.find("input");
            "radio" == n.prop("type") ? (n.prop("checked") && (e = !1), t.find(".active").removeClass("active"), this.$element.addClass("active")) : "checkbox" == n.prop("type") && (n.prop("checked") !== this.$element.hasClass("active") && (e = !1), this.$element.toggleClass("active")), n.prop("checked", this.$element.hasClass("active")), e && n.trigger("change")
        } else this.$element.attr("aria-pressed", !this.$element.hasClass("active")), this.$element.toggleClass("active")
    };
    var e = r.fn.button;
    r.fn.button = n, r.fn.button.Constructor = o, r.fn.button.noConflict = function() {
        return r.fn.button = e, this
    }, r(document).on("click.bs.button.data-api", '[data-toggle^="button"]', function(e) {
        var t = r(e.target).closest(".btn");
        n.call(t, "toggle"), r(e.target).is('input[type="radio"], input[type="checkbox"]') || (e.preventDefault(), t.is("input,button") ? t.trigger("focus") : t.find("input:visible,button:visible").first().trigger("focus"))
    }).on("focus.bs.button.data-api blur.bs.button.data-api", '[data-toggle^="button"]', function(e) {
        r(e.target).closest(".btn").toggleClass("focus", /^focus(in)?$/.test(e.type))
    })
}(jQuery), function(d) {
    "use strict";

    function a(o) {
        return this.each(function() {
            var e = d(this),
                t = e.data("bs.carousel"),
                n = d.extend({}, f.DEFAULTS, e.data(), "object" == typeof o && o),
                i = "string" == typeof o ? o : n.slide;
            t || e.data("bs.carousel", t = new f(this, n)), "number" == typeof o ? t.to(o) : i ? t[i]() : n.interval && t.pause().cycle()
        })
    }
    var f = function(e, t) {
        this.$element = d(e), this.$indicators = this.$element.find(".carousel-indicators"), this.options = t, this.paused = null, this.sliding = null, this.interval = null, this.$active = null, this.$items = null, this.options.keyboard && this.$element.on("keydown.bs.carousel", d.proxy(this.keydown, this)), "hover" == this.options.pause && !("ontouchstart" in document.documentElement) && this.$element.on("mouseenter.bs.carousel", d.proxy(this.pause, this)).on("mouseleave.bs.carousel", d.proxy(this.cycle, this))
    };
    f.VERSION = "3.3.7", f.TRANSITION_DURATION = 600, f.DEFAULTS = {
        interval: 5e3,
        pause: "hover",
        wrap: !0,
        keyboard: !0
    }, f.prototype.keydown = function(e) {
        if (!/input|textarea/i.test(e.target.tagName)) {
            switch (e.which) {
                case 37:
                    this.prev();
                    break;
                case 39:
                    this.next();
                    break;
                default:
                    return
            }
            e.preventDefault()
        }
    }, f.prototype.cycle = function(e) {
        return e || (this.paused = !1), this.interval && clearInterval(this.interval), this.options.interval && !this.paused && (this.interval = setInterval(d.proxy(this.next, this), this.options.interval)), this
    }, f.prototype.getItemIndex = function(e) {
        return this.$items = e.parent().children(".item"), this.$items.index(e || this.$active)
    }, f.prototype.getItemForDirection = function(e, t) {
        var n = this.getItemIndex(t);
        if (("prev" == e && 0 === n || "next" == e && n == this.$items.length - 1) && !this.options.wrap) return t;
        var i = (n + ("prev" == e ? -1 : 1)) % this.$items.length;
        return this.$items.eq(i)
    }, f.prototype.to = function(e) {
        var t = this,
            n = this.getItemIndex(this.$active = this.$element.find(".item.active"));
        if (!(e > this.$items.length - 1 || e < 0)) return this.sliding ? this.$element.one("slid.bs.carousel", function() {
            t.to(e)
        }) : n == e ? this.pause().cycle() : this.slide(n < e ? "next" : "prev", this.$items.eq(e))
    }, f.prototype.pause = function(e) {
        return e || (this.paused = !0), this.$element.find(".next, .prev").length && d.support.transition && (this.$element.trigger(d.support.transition.end), this.cycle(!0)), this.interval = clearInterval(this.interval), this
    }, f.prototype.next = function() {
        if (!this.sliding) return this.slide("next")
    }, f.prototype.prev = function() {
        if (!this.sliding) return this.slide("prev")
    }, f.prototype.slide = function(e, t) {
        var n = this.$element.find(".item.active"),
            i = t || this.getItemForDirection(e, n),
            o = this.interval,
            r = "next" == e ? "left" : "right",
            a = this;
        if (i.hasClass("active")) return this.sliding = !1;
        var s = i[0],
            l = d.Event("slide.bs.carousel", {
                relatedTarget: s,
                direction: r
            });
        if (this.$element.trigger(l), !l.isDefaultPrevented()) {
            if (this.sliding = !0, o && this.pause(), this.$indicators.length) {
                this.$indicators.find(".active").removeClass("active");
                var c = d(this.$indicators.children()[this.getItemIndex(i)]);
                c && c.addClass("active")
            }
            var u = d.Event("slid.bs.carousel", {
                relatedTarget: s,
                direction: r
            });
            return d.support.transition && this.$element.hasClass("slide") ? (i.addClass(e), i[0].offsetWidth, n.addClass(r), i.addClass(r), n.one("bsTransitionEnd", function() {
                i.removeClass([e, r].join(" ")).addClass("active"), n.removeClass(["active", r].join(" ")), a.sliding = !1, setTimeout(function() {
                    a.$element.trigger(u)
                }, 0)
            }).emulateTransitionEnd(f.TRANSITION_DURATION)) : (n.removeClass("active"), i.addClass("active"), this.sliding = !1, this.$element.trigger(u)), o && this.cycle(), this
        }
    };
    var e = d.fn.carousel;
    d.fn.carousel = a, d.fn.carousel.Constructor = f, d.fn.carousel.noConflict = function() {
        return d.fn.carousel = e, this
    };
    var t = function(e) {
        var t, n = d(this),
            i = d(n.attr("data-target") || (t = n.attr("href")) && t.replace(/.*(?=#[^\s]+$)/, ""));
        if (i.hasClass("carousel")) {
            var o = d.extend({}, i.data(), n.data()),
                r = n.attr("data-slide-to");
            r && (o.interval = !1), a.call(i, o), r && i.data("bs.carousel").to(r), e.preventDefault()
        }
    };
    d(document).on("click.bs.carousel.data-api", "[data-slide]", t).on("click.bs.carousel.data-api", "[data-slide-to]", t), d(window).on("load", function() {
        d('[data-ride="carousel"]').each(function() {
            var e = d(this);
            a.call(e, e.data())
        })
    })
}(jQuery), function(a) {
    "use strict";

    function o(e) {
        var t, n = e.attr("data-target") || (t = e.attr("href")) && t.replace(/.*(?=#[^\s]+$)/, "");
        return a(n)
    }
    function s(i) {
        return this.each(function() {
            var e = a(this),
                t = e.data("bs.collapse"),
                n = a.extend({}, l.DEFAULTS, e.data(), "object" == typeof i && i);
            !t && n.toggle && /show|hide/.test(i) && (n.toggle = !1), t || e.data("bs.collapse", t = new l(this, n)), "string" == typeof i && t[i]()
        })
    }
    var l = function(e, t) {
        this.$element = a(e), this.options = a.extend({}, l.DEFAULTS, t), this.$trigger = a('[data-toggle="collapse"][href="#' + e.id + '"],[data-toggle="collapse"][data-target="#' + e.id + '"]'), this.transitioning = null, this.options.parent ? this.$parent = this.getParent() : this.addAriaAndCollapsedClass(this.$element, this.$trigger), this.options.toggle && this.toggle()
    };
    l.VERSION = "3.3.7", l.TRANSITION_DURATION = 350, l.DEFAULTS = {
        toggle: !0
    }, l.prototype.dimension = function() {
        return this.$element.hasClass("width") ? "width" : "height"
    }, l.prototype.show = function() {
        if (!this.transitioning && !this.$element.hasClass("in")) {
            var e, t = this.$parent && this.$parent.children(".panel").children(".in, .collapsing");
            if (!(t && t.length && (e = t.data("bs.collapse")) && e.transitioning)) {
                var n = a.Event("show.bs.collapse");
                if (this.$element.trigger(n), !n.isDefaultPrevented()) {
                    t && t.length && (s.call(t, "hide"), e || t.data("bs.collapse", null));
                    var i = this.dimension();
                    this.$element.removeClass("collapse").addClass("collapsing")[i](0).attr("aria-expanded", !0), this.$trigger.removeClass("collapsed").attr("aria-expanded", !0), this.transitioning = 1;
                    var o = function() {
                        this.$element.removeClass("collapsing").addClass("collapse in")[i](""), this.transitioning = 0, this.$element.trigger("shown.bs.collapse")
                    };
                    if (!a.support.transition) return o.call(this);
                    var r = a.camelCase(["scroll", i].join("-"));
                    this.$element.one("bsTransitionEnd", a.proxy(o, this)).emulateTransitionEnd(l.TRANSITION_DURATION)[i](this.$element[0][r])
                }
            }
        }
    }, l.prototype.hide = function() {
        if (!this.transitioning && this.$element.hasClass("in")) {
            var e = a.Event("hide.bs.collapse");
            if (this.$element.trigger(e), !e.isDefaultPrevented()) {
                var t = this.dimension();
                this.$element[t](this.$element[t]())[0].offsetHeight, this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded", !1), this.$trigger.addClass("collapsed").attr("aria-expanded", !1), this.transitioning = 1;
                var n = function() {
                    this.transitioning = 0, this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")
                };
                if (!a.support.transition) return n.call(this);
                this.$element[t](0).one("bsTransitionEnd", a.proxy(n, this)).emulateTransitionEnd(l.TRANSITION_DURATION)
            }
        }
    }, l.prototype.toggle = function() {
        this[this.$element.hasClass("in") ? "hide" : "show"]()
    }, l.prototype.getParent = function() {
        return a(this.options.parent).find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]').each(a.proxy(function(e, t) {
            var n = a(t);
            this.addAriaAndCollapsedClass(o(n), n)
        }, this)).end()
    }, l.prototype.addAriaAndCollapsedClass = function(e, t) {
        var n = e.hasClass("in");
        e.attr("aria-expanded", n), t.toggleClass("collapsed", !n).attr("aria-expanded", n)
    };
    var e = a.fn.collapse;
    a.fn.collapse = s, a.fn.collapse.Constructor = l, a.fn.collapse.noConflict = function() {
        return a.fn.collapse = e, this
    }, a(document).on("click.bs.collapse.data-api", '[data-toggle="collapse"]', function(e) {
        var t = a(this);
        t.attr("data-target") || e.preventDefault();
        var n = o(t),
            i = n.data("bs.collapse") ? "toggle" : t.data();
        s.call(n, i)
    })
}(jQuery), function(s) {
    "use strict";

    function l(e) {
        var t = e.attr("data-target");
        t || (t = (t = e.attr("href")) && /#[A-Za-z]/.test(t) && t.replace(/.*(?=#[^\s]*$)/, ""));
        var n = t && s(t);
        return n && n.length ? n : e.parent()
    }
    function r(i) {
        i && 3 === i.which || (s(t).remove(), s(c).each(function() {
            var e = s(this),
                t = l(e),
                n = {
                    relatedTarget: this
                };
            t.hasClass("open") && (i && "click" == i.type && /input|textarea/i.test(i.target.tagName) && s.contains(t[0], i.target) || (t.trigger(i = s.Event("hide.bs.dropdown", n)), i.isDefaultPrevented() || (e.attr("aria-expanded", "false"), t.removeClass("open").trigger(s.Event("hidden.bs.dropdown", n)))))
        }))
    }
    function e(n) {
        return this.each(function() {
            var e = s(this),
                t = e.data("bs.dropdown");
            t || e.data("bs.dropdown", t = new i(this)), "string" == typeof n && t[n].call(e)
        })
    }
    var t = ".dropdown-backdrop",
        c = '[data-toggle="dropdown"]',
        i = function(e) {
            s(e).on("click.bs.dropdown", this.toggle)
        };
    i.VERSION = "3.3.7", i.prototype.toggle = function(e) {
        var t = s(this);
        if (!t.is(".disabled, :disabled")) {
            var n = l(t),
                i = n.hasClass("open");
            if (r(), !i) {
                "ontouchstart" in document.documentElement && !n.closest(".navbar-nav").length && s(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(s(this)).on("click", r);
                var o = {
                    relatedTarget: this
                };
                if (n.trigger(e = s.Event("show.bs.dropdown", o)), e.isDefaultPrevented()) return;
                t.trigger("focus").attr("aria-expanded", "true"), n.toggleClass("open").trigger(s.Event("shown.bs.dropdown", o))
            }
            return !1
        }
    }, i.prototype.keydown = function(e) {
        if (/(38|40|27|32)/.test(e.which) && !/input|textarea/i.test(e.target.tagName)) {
            var t = s(this);
            if (e.preventDefault(), e.stopPropagation(), !t.is(".disabled, :disabled")) {
                var n = l(t),
                    i = n.hasClass("open");
                if (!i && 27 != e.which || i && 27 == e.which) return 27 == e.which && n.find(c).trigger("focus"), t.trigger("click");
                var o = " li:not(.disabled):visible a",
                    r = n.find(".dropdown-menu" + o);
                if (r.length) {
                    var a = r.index(e.target);
                    38 == e.which && 0 < a && a--, 40 == e.which && a < r.length - 1 && a++, ~a || (a = 0), r.eq(a).trigger("focus")
                }
            }
        }
    };
    var n = s.fn.dropdown;
    s.fn.dropdown = e, s.fn.dropdown.Constructor = i, s.fn.dropdown.noConflict = function() {
        return s.fn.dropdown = n, this
    }, s(document).on("click.bs.dropdown.data-api", r).on("click.bs.dropdown.data-api", ".dropdown form", function(e) {
        e.stopPropagation()
    }).on("click.bs.dropdown.data-api", c, i.prototype.toggle).on("keydown.bs.dropdown.data-api", c, i.prototype.keydown).on("keydown.bs.dropdown.data-api", ".dropdown-menu", i.prototype.keydown)
}(jQuery), function(r) {
    "use strict";

    function a(i, o) {
        return this.each(function() {
            var e = r(this),
                t = e.data("bs.modal"),
                n = r.extend({}, s.DEFAULTS, e.data(), "object" == typeof i && i);
            t || e.data("bs.modal", t = new s(this, n)), "string" == typeof i ? t[i](o) : n.show && t.show(o)
        })
    }
    var s = function(e, t) {
        this.options = t, this.$body = r(document.body), this.$element = r(e), this.$dialog = this.$element.find(".modal-dialog"), this.$backdrop = null, this.isShown = null, this.originalBodyPad = null, this.scrollbarWidth = 0, this.ignoreBackdropClick = !1, this.options.remote && this.$element.find(".modal-content").load(this.options.remote, r.proxy(function() {
            this.$element.trigger("loaded.bs.modal")
        }, this))
    };
    s.VERSION = "3.3.7", s.TRANSITION_DURATION = 300, s.BACKDROP_TRANSITION_DURATION = 150, s.DEFAULTS = {
        backdrop: !0,
        keyboard: !0,
        show: !0
    }, s.prototype.toggle = function(e) {
        return this.isShown ? this.hide() : this.show(e)
    }, s.prototype.show = function(n) {
        var i = this,
            e = r.Event("show.bs.modal", {
                relatedTarget: n
            });
        this.$element.trigger(e), this.isShown || e.isDefaultPrevented() || (this.isShown = !0, this.checkScrollbar(), this.setScrollbar(), this.$body.addClass("modal-open"), this.escape(), this.resize(), this.$element.on("click.dismiss.bs.modal", '[data-dismiss="modal"]', r.proxy(this.hide, this)), this.$dialog.on("mousedown.dismiss.bs.modal", function() {
            i.$element.one("mouseup.dismiss.bs.modal", function(e) {
                r(e.target).is(i.$element) && (i.ignoreBackdropClick = !0)
            })
        }), this.backdrop(function() {
            var e = r.support.transition && i.$element.hasClass("fade");
            i.$element.parent().length || i.$element.appendTo(i.$body), i.$element.show().scrollTop(0), i.adjustDialog(), e && i.$element[0].offsetWidth, i.$element.addClass("in"), i.enforceFocus();
            var t = r.Event("shown.bs.modal", {
                relatedTarget: n
            });
            e ? i.$dialog.one("bsTransitionEnd", function() {
                i.$element.trigger("focus").trigger(t)
            }).emulateTransitionEnd(s.TRANSITION_DURATION) : i.$element.trigger("focus").trigger(t)
        }))
    }, s.prototype.hide = function(e) {
        e && e.preventDefault(), e = r.Event("hide.bs.modal"), this.$element.trigger(e), this.isShown && !e.isDefaultPrevented() && (this.isShown = !1, this.escape(), this.resize(), r(document).off("focusin.bs.modal"), this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"), this.$dialog.off("mousedown.dismiss.bs.modal"), r.support.transition && this.$element.hasClass("fade") ? this.$element.one("bsTransitionEnd", r.proxy(this.hideModal, this)).emulateTransitionEnd(s.TRANSITION_DURATION) : this.hideModal())
    }, s.prototype.enforceFocus = function() {
        r(document).off("focusin.bs.modal").on("focusin.bs.modal", r.proxy(function(e) {
            document === e.target || this.$element[0] === e.target || this.$element.has(e.target).length || this.$element.trigger("focus")
        }, this))
    }, s.prototype.escape = function() {
        this.isShown && this.options.keyboard ? this.$element.on("keydown.dismiss.bs.modal", r.proxy(function(e) {
            27 == e.which && this.hide()
        }, this)) : this.isShown || this.$element.off("keydown.dismiss.bs.modal")
    }, s.prototype.resize = function() {
        this.isShown ? r(window).on("resize.bs.modal", r.proxy(this.handleUpdate, this)) : r(window).off("resize.bs.modal")
    }, s.prototype.hideModal = function() {
        var e = this;
        this.$element.hide(), this.backdrop(function() {
            e.$body.removeClass("modal-open"), e.resetAdjustments(), e.resetScrollbar(), e.$element.trigger("hidden.bs.modal")
        })
    }, s.prototype.removeBackdrop = function() {
        this.$backdrop && this.$backdrop.remove(), this.$backdrop = null
    }, s.prototype.backdrop = function(e) {
        var t = this,
            n = this.$element.hasClass("fade") ? "fade" : "";
        if (this.isShown && this.options.backdrop) {
            var i = r.support.transition && n;
            if (this.$backdrop = r(document.createElement("div")).addClass("modal-backdrop " + n).appendTo(this.$body), this.$element.on("click.dismiss.bs.modal", r.proxy(function(e) {
                    this.ignoreBackdropClick ? this.ignoreBackdropClick = !1 : e.target === e.currentTarget && ("static" == this.options.backdrop ? this.$element[0].focus() : this.hide())
                }, this)), i && this.$backdrop[0].offsetWidth, this.$backdrop.addClass("in"), !e) return;
            i ? this.$backdrop.one("bsTransitionEnd", e).emulateTransitionEnd(s.BACKDROP_TRANSITION_DURATION) : e()
        } else if (!this.isShown && this.$backdrop) {
            this.$backdrop.removeClass("in");
            var o = function() {
                t.removeBackdrop(), e && e()
            };
            r.support.transition && this.$element.hasClass("fade") ? this.$backdrop.one("bsTransitionEnd", o).emulateTransitionEnd(s.BACKDROP_TRANSITION_DURATION) : o()
        } else e && e()
    }, s.prototype.handleUpdate = function() {
        this.adjustDialog()
    }, s.prototype.adjustDialog = function() {
        var e = this.$element[0].scrollHeight > document.documentElement.clientHeight;
        this.$element.css({
            paddingLeft: !this.bodyIsOverflowing && e ? this.scrollbarWidth : "",
            paddingRight: this.bodyIsOverflowing && !e ? this.scrollbarWidth : ""
        })
    }, s.prototype.resetAdjustments = function() {
        this.$element.css({
            paddingLeft: "",
            paddingRight: ""
        })
    }, s.prototype.checkScrollbar = function() {
        var e = window.innerWidth;
        if (!e) {
            var t = document.documentElement.getBoundingClientRect();
            e = t.right - Math.abs(t.left)
        }
        this.bodyIsOverflowing = document.body.clientWidth < e, this.scrollbarWidth = this.measureScrollbar()
    }, s.prototype.setScrollbar = function() {
        var e = parseInt(this.$body.css("padding-right") || 0, 10);
        this.originalBodyPad = document.body.style.paddingRight || "", this.bodyIsOverflowing && this.$body.css("padding-right", e + this.scrollbarWidth)
    }, s.prototype.resetScrollbar = function() {
        this.$body.css("padding-right", this.originalBodyPad)
    }, s.prototype.measureScrollbar = function() {
        var e = document.createElement("div");
        e.className = "modal-scrollbar-measure", this.$body.append(e);
        var t = e.offsetWidth - e.clientWidth;
        return this.$body[0].removeChild(e), t
    };
    var e = r.fn.modal;
    r.fn.modal = a, r.fn.modal.Constructor = s, r.fn.modal.noConflict = function() {
        return r.fn.modal = e, this
    }, r(document).on("click.bs.modal.data-api", '[data-toggle="modal"]', function(e) {
        var t = r(this),
            n = t.attr("href"),
            i = r(t.attr("data-target") || n && n.replace(/.*(?=#[^\s]+$)/, "")),
            o = i.data("bs.modal") ? "toggle" : r.extend({
                remote: !/#/.test(n) && n
            }, i.data(), t.data());
        t.is("a") && e.preventDefault(), i.one("show.bs.modal", function(e) {
            e.isDefaultPrevented() || i.one("hidden.bs.modal", function() {
                t.is(":visible") && t.trigger("focus")
            })
        }), a.call(i, o, this)
    })
}(jQuery), function(s) {
    "use strict";

    function t(n) {
        return this.each(function() {
            var e = s(this),
                t = e.data("bs.tab");
            t || e.data("bs.tab", t = new a(this)), "string" == typeof n && t[n]()
        })
    }
    var a = function(e) {
        this.element = s(e)
    };
    a.VERSION = "3.3.7", a.TRANSITION_DURATION = 150, a.prototype.show = function() {
        var e = this.element,
            t = e.closest("ul:not(.dropdown-menu)"),
            n = e.data("target");
        if (n || (n = (n = e.attr("href")) && n.replace(/.*(?=#[^\s]*$)/, "")), !e.parent("li").hasClass("active")) {
            var i = t.find(".active:last a"),
                o = s.Event("hide.bs.tab", {
                    relatedTarget: e[0]
                }),
                r = s.Event("show.bs.tab", {
                    relatedTarget: i[0]
                });
            if (i.trigger(o), e.trigger(r), !r.isDefaultPrevented() && !o.isDefaultPrevented()) {
                var a = s(n);
                this.activate(e.closest("li"), t), this.activate(a, a.parent(), function() {
                    i.trigger({
                        type: "hidden.bs.tab",
                        relatedTarget: e[0]
                    }), e.trigger({
                        type: "shown.bs.tab",
                        relatedTarget: i[0]
                    })
                })
            }
        }
    }, a.prototype.activate = function(e, t, n) {
        function i() {
            o.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded", !1), e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded", !0), r ? (e[0].offsetWidth, e.addClass("in")) : e.removeClass("fade"), e.parent(".dropdown-menu").length && e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded", !0), n && n()
        }
        var o = t.find("> .active"),
            r = n && s.support.transition && (o.length && o.hasClass("fade") || !! t.find("> .fade").length);
        o.length && r ? o.one("bsTransitionEnd", i).emulateTransitionEnd(a.TRANSITION_DURATION) : i(), o.removeClass("in")
    };
    var e = s.fn.tab;
    s.fn.tab = t, s.fn.tab.Constructor = a, s.fn.tab.noConflict = function() {
        return s.fn.tab = e, this
    };
    var n = function(e) {
        e.preventDefault(), t.call(s(this), "show")
    };
    s(document).on("click.bs.tab.data-api", '[data-toggle="tab"]', n).on("click.bs.tab.data-api", '[data-toggle="pill"]', n)
}(jQuery), function(l) {
    "use strict";

    function n(i) {
        return this.each(function() {
            var e = l(this),
                t = e.data("bs.affix"),
                n = "object" == typeof i && i;
            t || e.data("bs.affix", t = new c(this, n)), "string" == typeof i && t[i]()
        })
    }
    var c = function(e, t) {
        this.options = l.extend({}, c.DEFAULTS, t), this.$target = l(this.options.target).on("scroll.bs.affix.data-api", l.proxy(this.checkPosition, this)).on("click.bs.affix.data-api", l.proxy(this.checkPositionWithEventLoop, this)), this.$element = l(e), this.affixed = null, this.unpin = null, this.pinnedOffset = null, this.checkPosition()
    };
    c.VERSION = "3.3.7", c.RESET = "affix affix-top affix-bottom", c.DEFAULTS = {
        offset: 0,
        target: window
    }, c.prototype.getState = function(e, t, n, i) {
        var o = this.$target.scrollTop(),
            r = this.$element.offset(),
            a = this.$target.height();
        if (null != n && "top" == this.affixed) return o < n && "top";
        if ("bottom" == this.affixed) return null != n ? !(o + this.unpin <= r.top) && "bottom" : !(o + a <= e - i) && "bottom";
        var s = null == this.affixed,
            l = s ? o : r.top;
        return null != n && o <= n ? "top" : null != i && e - i <= l + (s ? a : t) && "bottom"
    }, c.prototype.getPinnedOffset = function() {
        if (this.pinnedOffset) return this.pinnedOffset;
        this.$element.removeClass(c.RESET).addClass("affix");
        var e = this.$target.scrollTop(),
            t = this.$element.offset();
        return this.pinnedOffset = t.top - e
    }, c.prototype.checkPositionWithEventLoop = function() {
        setTimeout(l.proxy(this.checkPosition, this), 1)
    }, c.prototype.checkPosition = function() {
        if (this.$element.is(":visible")) {
            var e = this.$element.height(),
                t = this.options.offset,
                n = t.top,
                i = t.bottom,
                o = Math.max(l(document).height(), l(document.body).height());
            "object" != typeof t && (i = n = t), "function" == typeof n && (n = t.top(this.$element)), "function" == typeof i && (i = t.bottom(this.$element));
            var r = this.getState(o, e, n, i);
            if (this.affixed != r) {
                null != this.unpin && this.$element.css("top", "");
                var a = "affix" + (r ? "-" + r : ""),
                    s = l.Event(a + ".bs.affix");
                if (this.$element.trigger(s), s.isDefaultPrevented()) return;
                this.affixed = r, this.unpin = "bottom" == r ? this.getPinnedOffset() : null, this.$element.removeClass(c.RESET).addClass(a).trigger(a.replace("affix", "affixed") + ".bs.affix")
            }
            "bottom" == r && this.$element.offset({
                top: o - e - i
            })
        }
    };
    var e = l.fn.affix;
    l.fn.affix = n, l.fn.affix.Constructor = c, l.fn.affix.noConflict = function() {
        return l.fn.affix = e, this
    }, l(window).on("load", function() {
        l('[data-spy="affix"]').each(function() {
            var e = l(this),
                t = e.data();
            t.offset = t.offset || {}, null != t.offsetBottom && (t.offset.bottom = t.offsetBottom), null != t.offsetTop && (t.offset.top = t.offsetTop), n.call(e, t)
        })
    })
}(jQuery), function(r) {
    "use strict";

    function o(e, t) {
        this.$body = r(document.body), this.$scrollElement = r(e).is(document.body) ? r(window) : r(e), this.options = r.extend({}, o.DEFAULTS, t), this.selector = (this.options.target || "") + " .nav li > a", this.offsets = [], this.targets = [], this.activeTarget = null, this.scrollHeight = 0, this.$scrollElement.on("scroll.bs.scrollspy", r.proxy(this.process, this)), this.refresh(), this.process()
    }
    function t(i) {
        return this.each(function() {
            var e = r(this),
                t = e.data("bs.scrollspy"),
                n = "object" == typeof i && i;
            t || e.data("bs.scrollspy", t = new o(this, n)), "string" == typeof i && t[i]()
        })
    }
    o.VERSION = "3.3.7", o.DEFAULTS = {
        offset: 10
    }, o.prototype.getScrollHeight = function() {
        return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
    }, o.prototype.refresh = function() {
        var e = this,
            i = "offset",
            o = 0;
        this.offsets = [], this.targets = [], this.scrollHeight = this.getScrollHeight(), r.isWindow(this.$scrollElement[0]) || (i = "position", o = this.$scrollElement.scrollTop()), this.$body.find(this.selector).map(function() {
            var e = r(this),
                t = e.data("target") || e.attr("href"),
                n = /^#./.test(t) && r(t);
            return n && n.length && n.is(":visible") && [
                    [n[i]().top + o, t]
                ] || null
        }).sort(function(e, t) {
            return e[0] - t[0]
        }).each(function() {
            e.offsets.push(this[0]), e.targets.push(this[1])
        })
    }, o.prototype.process = function() {
        var e, t = this.$scrollElement.scrollTop() + this.options.offset,
            n = this.getScrollHeight(),
            i = this.options.offset + n - this.$scrollElement.height(),
            o = this.offsets,
            r = this.targets,
            a = this.activeTarget;
        if (this.scrollHeight != n && this.refresh(), i <= t) return a != (e = r[r.length - 1]) && this.activate(e);
        if (a && t < o[0]) return this.activeTarget = null, this.clear();
        for (e = o.length; e--;) a != r[e] && t >= o[e] && (o[e + 1] === undefined || t < o[e + 1]) && this.activate(r[e])
    }, o.prototype.activate = function(e) {
        this.activeTarget = e, this.clear();
        var t = this.selector + '[data-target="' + e + '"],' + this.selector + '[href="' + e + '"]',
            n = r(t).parents("li").addClass("active");
        n.parent(".dropdown-menu").length && (n = n.closest("li.dropdown").addClass("active")), n.trigger("activate.bs.scrollspy")
    }, o.prototype.clear = function() {
        r(this.selector).parentsUntil(this.options.target, ".active").removeClass("active")
    };
    var e = r.fn.scrollspy;
    r.fn.scrollspy = t, r.fn.scrollspy.Constructor = o, r.fn.scrollspy.noConflict = function() {
        return r.fn.scrollspy = e, this
    }, r(window).on("load.bs.scrollspy.data-api", function() {
        r('[data-spy="scroll"]').each(function() {
            var e = r(this);
            t.call(e, e.data())
        })
    })
}(jQuery), function(m) {
    "use strict";

    function e(i) {
        return this.each(function() {
            var e = m(this),
                t = e.data("bs.tooltip"),
                n = "object" == typeof i && i;
            !t && /destroy|hide/.test(i) || (t || e.data("bs.tooltip", t = new _(this, n)), "string" == typeof i && t[i]())
        })
    }
    var _ = function(e, t) {
        this.type = null, this.options = null, this.enabled = null, this.timeout = null, this.hoverState = null, this.$element = null, this.inState = null, this.init("tooltip", e, t)
    };
    _.VERSION = "3.3.7", _.TRANSITION_DURATION = 150, _.DEFAULTS = {
        animation: !0,
        placement: "top",
        selector: !1,
        template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
        trigger: "hover focus",
        title: "",
        delay: 0,
        html: !1,
        container: !1,
        viewport: {
            selector: "body",
            padding: 0
        }
    }, _.prototype.init = function(e, t, n) {
        if (this.enabled = !0, this.type = e, this.$element = m(t), this.options = this.getOptions(n), this.$viewport = this.options.viewport && m(m.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : this.options.viewport.selector || this.options.viewport), this.inState = {
                click: !1,
                hover: !1,
                focus: !1
            }, this.$element[0] instanceof document.constructor && !this.options.selector) throw new Error("`selector` option must be specified when initializing " + this.type + " on the window.document object!");
        for (var i = this.options.trigger.split(" "), o = i.length; o--;) {
            var r = i[o];
            if ("click" == r) this.$element.on("click." + this.type, this.options.selector, m.proxy(this.toggle, this));
            else if ("manual" != r) {
                var a = "hover" == r ? "mouseenter" : "focusin",
                    s = "hover" == r ? "mouseleave" : "focusout";
                this.$element.on(a + "." + this.type, this.options.selector, m.proxy(this.enter, this)), this.$element.on(s + "." + this.type, this.options.selector, m.proxy(this.leave, this))
            }
        }
        this.options.selector ? this._options = m.extend({}, this.options, {
            trigger: "manual",
            selector: ""
        }) : this.fixTitle()
    }, _.prototype.getDefaults = function() {
        return _.DEFAULTS
    }, _.prototype.getOptions = function(e) {
        return (e = m.extend({}, this.getDefaults(), this.$element.data(), e)).delay && "number" == typeof e.delay && (e.delay = {
            show: e.delay,
            hide: e.delay
        }), e
    }, _.prototype.getDelegateOptions = function() {
        var n = {},
            i = this.getDefaults();
        return this._options && m.each(this._options, function(e, t) {
            i[e] != t && (n[e] = t)
        }), n
    }, _.prototype.enter = function(e) {
        var t = e instanceof this.constructor ? e : m(e.currentTarget).data("bs." + this.type);
        if (t || (t = new this.constructor(e.currentTarget, this.getDelegateOptions()), m(e.currentTarget).data("bs." + this.type, t)), e instanceof m.Event && (t.inState["focusin" == e.type ? "focus" : "hover"] = !0), t.tip().hasClass("in") || "in" == t.hoverState) t.hoverState = "in";
        else {
            if (clearTimeout(t.timeout), t.hoverState = "in", !t.options.delay || !t.options.delay.show) return t.show();
            t.timeout = setTimeout(function() {
                "in" == t.hoverState && t.show()
            }, t.options.delay.show)
        }
    }, _.prototype.isInStateTrue = function() {
        for (var e in this.inState) if (this.inState[e]) return !0;
        return !1
    }, _.prototype.leave = function(e) {
        var t = e instanceof this.constructor ? e : m(e.currentTarget).data("bs." + this.type);
        if (t || (t = new this.constructor(e.currentTarget, this.getDelegateOptions()), m(e.currentTarget).data("bs." + this.type, t)), e instanceof m.Event && (t.inState["focusout" == e.type ? "focus" : "hover"] = !1), !t.isInStateTrue()) {
            if (clearTimeout(t.timeout), t.hoverState = "out", !t.options.delay || !t.options.delay.hide) return t.hide();
            t.timeout = setTimeout(function() {
                "out" == t.hoverState && t.hide()
            }, t.options.delay.hide)
        }
    }, _.prototype.show = function() {
        var e = m.Event("show.bs." + this.type);
        if (this.hasContent() && this.enabled) {
            this.$element.trigger(e);
            var t = m.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]);
            if (e.isDefaultPrevented() || !t) return;
            var n = this,
                i = this.tip(),
                o = this.getUID(this.type);
            this.setContent(), i.attr("id", o), this.$element.attr("aria-describedby", o), this.options.animation && i.addClass("fade");
            var r = "function" == typeof this.options.placement ? this.options.placement.call(this, i[0], this.$element[0]) : this.options.placement,
                a = /\s?auto?\s?/i,
                s = a.test(r);
            s && (r = r.replace(a, "") || "top"), i.detach().css({
                top: 0,
                left: 0,
                display: "block"
            }).addClass(r).data("bs." + this.type, this), this.options.container ? i.appendTo(this.options.container) : i.insertAfter(this.$element), this.$element.trigger("inserted.bs." + this.type);
            var l = this.getPosition(),
                c = i[0].offsetWidth,
                u = i[0].offsetHeight;
            if (s) {
                var d = r,
                    f = this.getPosition(this.$viewport);
                r = "bottom" == r && l.bottom + u > f.bottom ? "top" : "top" == r && l.top - u < f.top ? "bottom" : "right" == r && l.right + c > f.width ? "left" : "left" == r && l.left - c < f.left ? "right" : r, i.removeClass(d).addClass(r)
            }
            var h = this.getCalculatedOffset(r, l, c, u);
            this.applyPlacement(h, r);
            var p = function() {
                var e = n.hoverState;
                n.$element.trigger("shown.bs." + n.type), n.hoverState = null, "out" == e && n.leave(n)
            };
            m.support.transition && this.$tip.hasClass("fade") ? i.one("bsTransitionEnd", p).emulateTransitionEnd(_.TRANSITION_DURATION) : p()
        }
    }, _.prototype.applyPlacement = function(e, t) {
        var n = this.tip(),
            i = n[0].offsetWidth,
            o = n[0].offsetHeight,
            r = parseInt(n.css("margin-top"), 10),
            a = parseInt(n.css("margin-left"), 10);
        isNaN(r) && (r = 0), isNaN(a) && (a = 0), e.top += r, e.left += a, m.offset.setOffset(n[0], m.extend({
            using: function(e) {
                n.css({
                    top: Math.round(e.top),
                    left: Math.round(e.left)
                })
            }
        }, e), 0), n.addClass("in");
        var s = n[0].offsetWidth,
            l = n[0].offsetHeight;
        "top" == t && l != o && (e.top = e.top + o - l);
        var c = this.getViewportAdjustedDelta(t, e, s, l);
        c.left ? e.left += c.left : e.top += c.top;
        var u = /top|bottom/.test(t),
            d = u ? 2 * c.left - i + s : 2 * c.top - o + l,
            f = u ? "offsetWidth" : "offsetHeight";
        n.offset(e), this.replaceArrow(d, n[0][f], u)
    }, _.prototype.replaceArrow = function(e, t, n) {
        this.arrow().css(n ? "left" : "top", 50 * (1 - e / t) + "%").css(n ? "top" : "left", "")
    }, _.prototype.setContent = function() {
        var e = this.tip(),
            t = this.getTitle();
        e.find(".tooltip-inner")[this.options.html ? "html" : "text"](t), e.removeClass("fade in top bottom left right")
    }, _.prototype.hide = function(e) {
        function t() {
            "in" != n.hoverState && i.detach(), n.$element && n.$element.removeAttr("aria-describedby").trigger("hidden.bs." + n.type), e && e()
        }
        var n = this,
            i = m(this.$tip),
            o = m.Event("hide.bs." + this.type);
        if (this.$element.trigger(o), !o.isDefaultPrevented()) return i.removeClass("in"), m.support.transition && i.hasClass("fade") ? i.one("bsTransitionEnd", t).emulateTransitionEnd(_.TRANSITION_DURATION) : t(), this.hoverState = null, this
    }, _.prototype.fixTitle = function() {
        var e = this.$element;
        (e.attr("title") || "string" != typeof e.attr("data-original-title")) && e.attr("data-original-title", e.attr("title") || "").attr("title", "")
    }, _.prototype.hasContent = function() {
        return this.getTitle()
    }, _.prototype.getPosition = function(e) {
        var t = (e = e || this.$element)[0],
            n = "BODY" == t.tagName,
            i = t.getBoundingClientRect();
        null == i.width && (i = m.extend({}, i, {
            width: i.right - i.left,
            height: i.bottom - i.top
        }));
        var o = window.SVGElement && t instanceof window.SVGElement,
            r = n ? {
                top: 0,
                left: 0
            } : o ? null : e.offset(),
            a = {
                scroll: n ? document.documentElement.scrollTop || document.body.scrollTop : e.scrollTop()
            },
            s = n ? {
                width: m(window).width(),
                height: m(window).height()
            } : null;
        return m.extend({}, i, a, s, r)
    }, _.prototype.getCalculatedOffset = function(e, t, n, i) {
        return "bottom" == e ? {
            top: t.top + t.height,
            left: t.left + t.width / 2 - n / 2
        } : "top" == e ? {
            top: t.top - i,
            left: t.left + t.width / 2 - n / 2
        } : "left" == e ? {
            top: t.top + t.height / 2 - i / 2,
            left: t.left - n
        } : {
            top: t.top + t.height / 2 - i / 2,
            left: t.left + t.width
        }
    }, _.prototype.getViewportAdjustedDelta = function(e, t, n, i) {
        var o = {
            top: 0,
            left: 0
        };
        if (!this.$viewport) return o;
        var r = this.options.viewport && this.options.viewport.padding || 0,
            a = this.getPosition(this.$viewport);
        if (/right|left/.test(e)) {
            var s = t.top - r - a.scroll,
                l = t.top + r - a.scroll + i;
            s < a.top ? o.top = a.top - s : l > a.top + a.height && (o.top = a.top + a.height - l)
        } else {
            var c = t.left - r,
                u = t.left + r + n;
            c < a.left ? o.left = a.left - c : u > a.right && (o.left = a.left + a.width - u)
        }
        return o
    }, _.prototype.getTitle = function() {
        var e = this.$element,
            t = this.options;
        return e.attr("data-original-title") || ("function" == typeof t.title ? t.title.call(e[0]) : t.title)
    }, _.prototype.getUID = function(e) {
        for (; e += ~~ (1e6 * Math.random()), document.getElementById(e););
        return e
    }, _.prototype.tip = function() {
        if (!this.$tip && (this.$tip = m(this.options.template), 1 != this.$tip.length)) throw new Error(this.type + " `template` option must consist of exactly 1 top-level element!");
        return this.$tip
    }, _.prototype.arrow = function() {
        return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
    }, _.prototype.enable = function() {
        this.enabled = !0
    }, _.prototype.disable = function() {
        this.enabled = !1
    }, _.prototype.toggleEnabled = function() {
        this.enabled = !this.enabled
    }, _.prototype.toggle = function(e) {
        var t = this;
        e && ((t = m(e.currentTarget).data("bs." + this.type)) || (t = new this.constructor(e.currentTarget, this.getDelegateOptions()), m(e.currentTarget).data("bs." + this.type, t))), e ? (t.inState.click = !t.inState.click, t.isInStateTrue() ? t.enter(t) : t.leave(t)) : t.tip().hasClass("in") ? t.leave(t) : t.enter(t)
    }, _.prototype.destroy = function() {
        var e = this;
        clearTimeout(this.timeout), this.hide(function() {
            e.$element.off("." + e.type).removeData("bs." + e.type), e.$tip && e.$tip.detach(), e.$tip = null, e.$arrow = null, e.$viewport = null, e.$element = null
        })
    };
    var t = m.fn.tooltip;
    m.fn.tooltip = e, m.fn.tooltip.Constructor = _, m.fn.tooltip.noConflict = function() {
        return m.fn.tooltip = t, this
    }
}(jQuery), function(o) {
    "use strict";

    function e(i) {
        return this.each(function() {
            var e = o(this),
                t = e.data("bs.popover"),
                n = "object" == typeof i && i;
            !t && /destroy|hide/.test(i) || (t || e.data("bs.popover", t = new r(this, n)), "string" == typeof i && t[i]())
        })
    }
    var r = function(e, t) {
        this.init("popover", e, t)
    };
    if (!o.fn.tooltip) throw new Error("Popover requires tooltip.js");
    r.VERSION = "3.3.7", r.DEFAULTS = o.extend({}, o.fn.tooltip.Constructor.DEFAULTS, {
        placement: "right",
        trigger: "click",
        content: "",
        template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
    }), r.prototype = o.extend({}, o.fn.tooltip.Constructor.prototype), (r.prototype.constructor = r).prototype.getDefaults = function() {
        return r.DEFAULTS
    }, r.prototype.setContent = function() {
        var e = this.tip(),
            t = this.getTitle(),
            n = this.getContent();
        e.find(".popover-title")[this.options.html ? "html" : "text"](t), e.find(".popover-content").children().detach().end()[this.options.html ? "string" == typeof n ? "html" : "append" : "text"](n), e.removeClass("fade top bottom left right in"), e.find(".popover-title").html() || e.find(".popover-title").hide()
    }, r.prototype.hasContent = function() {
        return this.getTitle() || this.getContent()
    }, r.prototype.getContent = function() {
        var e = this.$element,
            t = this.options;
        return e.attr("data-content") || ("function" == typeof t.content ? t.content.call(e[0]) : t.content)
    }, r.prototype.arrow = function() {
        return this.$arrow = this.$arrow || this.tip().find(".arrow")
    };
    var t = o.fn.popover;
    o.fn.popover = e, o.fn.popover.Constructor = r, o.fn.popover.noConflict = function() {
        return o.fn.popover = t, this
    }
}(jQuery), function(e, t) {
    "function" == typeof define && define.amd ? define(["jquery"], t) : t(e.jQuery)
}(this, function(e) {
    var o, u, d;
    !
        function(f) {
            function h(e, t) {
                return n.call(e, t)
            }
            function r(e, t) {
                var n, i, o, r, a, s, l, c, u, d, f, h = t && t.split("/"),
                    p = w.map,
                    m = p && p["*"] || {};
                if (e && "." === e.charAt(0)) if (t) {
                    for (h = h.slice(0, h.length - 1), a = (e = e.split("/")).length - 1, w.nodeIdCompat && k.test(e[a]) && (e[a] = e[a].replace(k, "")), e = h.concat(e), u = 0; u < e.length; u += 1) if ("." === (f = e[u])) e.splice(u, 1), u -= 1;
                    else if (".." === f) {
                        if (1 === u && (".." === e[2] || ".." === e[0])) break;
                        0 < u && (e.splice(u - 1, 2), u -= 2)
                    }
                    e = e.join("/")
                } else 0 === e.indexOf("./") && (e = e.substring(2));
                if ((h || m) && p) {
                    for (u = (n = e.split("/")).length; 0 < u; u -= 1) {
                        if (i = n.slice(0, u).join("/"), h) for (d = h.length; 0 < d; d -= 1) if ((o = p[h.slice(0, d).join("/")]) && (o = o[i])) {
                            r = o, s = u;
                            break
                        }
                        if (r) break;
                        !l && m && m[i] && (l = m[i], c = u)
                    }!r && l && (r = l, s = c), r && (n.splice(0, s, r), e = n.join("/"))
                }
                return e
            }
            function p(e, t) {
                return function() {
                    return c.apply(f, i.call(arguments, 0).concat([e, t]))
                }
            }
            function a(t) {
                return function(e) {
                    return r(e, t)
                }
            }
            function m(t) {
                return function(e) {
                    y[t] = e
                }
            }
            function _(e) {
                if (h(b, e)) {
                    var t = b[e];
                    delete b[e], x[e] = !0, l.apply(f, t)
                }
                if (!h(y, e) && !h(x, e)) throw new Error("No " + e);
                return y[e]
            }
            function s(e) {
                var t, n = e ? e.indexOf("!") : -1;
                return -1 < n && (t = e.substring(0, n), e = e.substring(n + 1, e.length)), [t, e]
            }
            function t(e) {
                return function() {
                    return w && w.config && w.config[e] || {}
                }
            }
            var l, c, g, v, y = {},
                b = {},
                w = {},
                x = {},
                n = Object.prototype.hasOwnProperty,
                i = [].slice,
                k = /\.js$/;
            g = function(e, t) {
                var n, i = s(e),
                    o = i[0];
                return e = i[1], o && (n = _(o = r(o, t))), o ? e = n && n.normalize ? n.normalize(e, a(t)) : r(e, t) : (o = (i = s(e = r(e, t)))[0], e = i[1], o && (n = _(o))), {
                    f: o ? o + "!" + e : e,
                    n: e,
                    pr: o,
                    p: n
                }
            }, v = {
                require: function(e) {
                    return p(e)
                },
                exports: function(e) {
                    var t = y[e];
                    return void 0 !== t ? t : y[e] = {}
                },
                module: function(e) {
                    return {
                        id: e,
                        uri: "",
                        exports: y[e],
                        config: t(e)
                    }
                }
            }, l = function(e, t, n, i) {
                var o, r, a, s, l, c, u = [],
                    d = typeof n;
                if (i = i || e, "undefined" === d || "function" === d) {
                    for (t = !t.length && n.length ? ["require", "exports", "module"] : t, l = 0; l < t.length; l += 1) if ("require" === (r = (s = g(t[l], i)).f)) u[l] = v.require(e);
                    else if ("exports" === r) u[l] = v.exports(e), c = !0;
                    else if ("module" === r) o = u[l] = v.module(e);
                    else if (h(y, r) || h(b, r) || h(x, r)) u[l] = _(r);
                    else {
                        if (!s.p) throw new Error(e + " missing " + r);
                        s.p.load(s.n, p(i, !0), m(r), {}), u[l] = y[r]
                    }
                    a = n ? n.apply(y[e], u) : undefined, e && (o && o.exports !== f && o.exports !== y[e] ? y[e] = o.exports : a === f && c || (y[e] = a))
                } else e && (y[e] = n)
            }, o = u = c = function(e, t, n, i, o) {
                if ("string" == typeof e) return v[e] ? v[e](t) : _(g(e, t).f);
                if (!e.splice) {
                    if ((w = e).deps && c(w.deps, w.callback), !t) return;
                    t.splice ? (e = t, t = n, n = null) : e = f
                }
                return t = t ||
                    function() {}, "function" == typeof n && (n = i, i = o), i ? l(f, e, t, n) : setTimeout(function() {
                    l(f, e, t, n)
                }, 4), c
            }, c.config = function(e) {
                return c(e)
            }, o._defined = y, (d = function(e, t, n) {
                t.splice || (n = t, t = []), h(y, e) || h(b, e) || (b[e] = [e, t, n])
            }).amd = {
                jQuery: !0
            }
        }(), d("almond", function() {}), d("visualcaptcha/core", [], function() {
        "use strict";
        var i, n, o, r, a, s, l;
        return i = function(e, t, n) {
            return n = n || [], e.namespace && 0 < e.namespace.length && n.push(e.namespaceFieldName + "=" + e.namespace), n.push(e.randomParam + "=" + e.randomNonce), t + "?" + n.join("&")
        }, n = function(t) {
            var e, n = this;
            t.applyRandomNonce(), t.isLoading = !0, e = r(t), t._loading(n), t.callbacks.loading && t.callbacks.loading(n), t.request(e, function(e) {
                e.imageFieldName && (t.imageFieldName = e.imageFieldName), e.imageName && (t.imageName = e.imageName), e.values && (t.imageValues = e.values), e.imagesData && (t.imagesData = e.imagesData), t.isLoading = !1, t.hasLoaded = !0, t._loaded(n), t.callbacks.loaded && t.callbacks.loaded(n)
            })
        }, o = function(t, e) {
            var n = this;
            t._verifing(n), t.callbacks.verifing && t.callbacks.verifing(n), t.request(a(t, e), function(e) {
                t._verified(e), !e.result && t.autoRefresh && n.refresh(), t.callbacks.verified && t.callbacks.verified(n, e)
            })
        }, r = function(e) {
            var t = e.url + e.routes.start + "/" + e.numberOfImages,
                n = [];
            return l && n.push("retina=1"), n.push("locale=" + e.locale), i(e, t, n)
        }, a = function(e, t) {
            var n = e.url + e.routes.verify;
            return i(e, n, [e.imageFieldName + "=" + s(e, t)])
        }, s = function(e, t) {
            return 0 <= t && t < e.numberOfImages ? e.imageValues[t] : ""
        }, l = function() {
            return window.devicePixelRatio !== undefined && 1 < window.devicePixelRatio
        }, function(t) {
            var e;
            return e = {
                verify: function(e) {
                    return o.call(this, t, e)
                },
                refresh: function() {
                    return n.call(this, t)
                },
                isLoading: function() {
                    return t.isLoading
                },
                hasLoaded: function() {
                    return t.hasLoaded
                },
                numberOfImages: function() {
                    return t.imageValues.length
                },
                locale: function() {
                    return t.locale
                },
                imageName: function() {
                    return t.imageName
                },
                imageValue: function(e) {
                    return s.call(this, t, e)
                },
                imageFieldName: function() {
                    return t.imageFieldName
                },
                namespace: function() {
                    return t.namespace
                },
                namespaceFieldName: function() {
                    return t.namespaceFieldName
                },
                isPrimary: function() {
                    return t.isPrimary
                },
                imagesData: function() {
                    return t.imagesData
                },
                isRetina: l
            }, t.autoRefresh && e.refresh(), e
        }
    }), d("visualcaptcha/xhr-request", [], function() {
        "use strict";
        var i = window.XMLHttpRequest;
        return function(e, t) {
            var n = new i;
            n.open("GET", e, !0), n.onreadystatechange = function() {
                var e;
                4 === n.readyState && 200 === n.status && (e = JSON.parse(n.responseText), t(e))
            }, n.send()
        }
    }), d("visualcaptcha/config", ["visualcaptcha/xhr-request"], function(i) {
        "use strict";
        return function(e) {
            var t = window.location.href.split("/");
            t[t.length - 1] = "";
            var n = {
                request: i,
                url: t.join("/").slice(0, -1),
                namespace: "",
                namespaceFieldName: "namespace",
                isPrimary: !0,
                routes: {
                    start: "/captchas",
                    image: "/images",
                    verify: "/verification"
                },
                isLoading: !1,
                hasLoaded: !1,
                autoRefresh: !0,
                numberOfImages: 6,
                locale: "zh_cn",
                randomNonce: "",
                randomParam: "r",
                imageFieldName: "",
                imageName: "",
                imageValues: [],
                imagesData: [],
                callbacks: {},
                _loading: function() {},
                _loaded: function() {},
                _verifing: function() {},
                _verified: function() {},
                applyRandomNonce: function() {
                    return n.randomNonce = Math.random().toString(36).substring(2)
                }
            };
            return e.request && (n.request = e.request), e.url && (n.url = e.url), e.namespace && (n.namespace = e.namespace), e.namespaceFieldName && (n.namespaceFieldName = e.namespaceFieldName), "boolean" == typeof e.isPrimary && (n.isPrimary = e.isPrimary), "undefined" != typeof e.autoRefresh && (n.autoRefresh = e.autoRefresh), e.numberOfImages && (n.numberOfImages = e.numberOfImages), e.locale && (n.locale = e.locale), e.imagesData && (n.imagesData = e.imagesData), e.routes && (e.routes.start && (n.routes.start = e.routes.start), e.routes.image && (n.routes.image = e.routes.image), e.routes.image && (n.routes.verify = e.routes.verify)), e.randomParam && (n.randomParam = e.randomParam), e.callbacks && (e.callbacks.loading && (n.callbacks.loading = e.callbacks.loading), e.callbacks.loaded && (n.callbacks.loaded = e.callbacks.loaded), e.callbacks.verified && (n.callbacks.verified = e.callbacks.verified)), e._loading && (n._loading = e._loading), e._loaded && (n._loaded = e._loaded), e._verified && (n._verified = e._verified), e._verifing && (n._verifing = e._verifing), n
        }
    }), d("visualcaptcha", ["require", "visualcaptcha/core", "visualcaptcha/config"], function(e) {
        "use strict";
        var t = e("visualcaptcha/core"),
            n = e("visualcaptcha/config");
        return function(e) {
            return t(n(e = e || {}))
        }
    }), d("visualcaptcha/templates", [], function() {
        "use strict";
        var a;
        return a = function(e, t) {
            for (var n in t) e = e.replace(new RegExp("{" + n + "}", "g"), t[n]);
            return e
        }, {
            buttons: function(e, t, n) {
                var i, o;
                return i = '<div class="visualCaptcha-button-group">' + ('<div class="visualCaptcha-refresh-button"><a href="javascript:void(0)"><img src="' + "" + '" title="{refreshTitle}" alt="{refreshAlt}" /></a></div>') + "</div>", o = {
                    path: n || "",
                    refreshTitle: t.refreshTitle,
                    refreshAlt: t.refreshAlt,
                    retinaExtra: e.isRetina() ? "@2x" : ""
                }, a(i, o)
            },
            explanation: function(e, t) {
                var n, i;
                return n = '<label class="visualCaptcha-explanation">{explanation}</label>', i = {
                    explanation: t.explanation.replace(/ANSWER/, e.imageName())
                }, a(n, i)
            },
            images: function(e) {
                for (var t, n, i = "", o = 0, r = e.numberOfImages(); o < r; o++) t = '<div class="img"><a href="javascript:void(0)"><img src="data:image/png;base64,' + e.imagesData()[o] + '" id="visualCaptcha-img-{i}" data-index="{i}" alt="" title="" /></a></div>', i += a(t, n = {
                    i: o
                });
                return t = '<div class="visualCaptcha-possibilities">{images}</div>', n = {
                    imageFieldName: e.imageFieldName(),
                    images: i
                }, a(t, n)
            },
            imageInput: function(e, t) {
                var n, i;
                return n = '<input class="form-control imageField" type="hidden" name="{imageFieldName}" value="{value}" readonly="readonly" />', i = {
                    imageFieldName: e.imageFieldName(),
                    value: e.imageValue(t)
                }, a(n, i)
            },
            namespaceInput: function(e) {
                var t, n, i = e.namespace();
                return e.isPrimary() && i && 0 !== i.length ? (t = '<input type="hidden" name="{fieldName}" value="{value}" />', n = {
                    fieldName: e.namespaceFieldName(),
                    value: i
                }, a(t, n)) : ""
            }
        }
    }), d("visualcaptcha/language", [], function() {
        "use strict";
        return {
            en: {
                explanation: "Click or touch the ANSWER",
                refreshAlt: "Refresh/reload icon",
                refreshTitle: "Refresh/reload: get new images",
                successMessage: "Verified Successfully.",
                failedMessage: "Verified Failed. Please try again.",
                verifingMessage: "Verifing..."
            },
            zh_cn: {
                explanation: "\u8bf7\u9009\u62e9\u4ee5\u4e0b\u56fe\u6807\u4e2d\u7684 ANSWER",
                refreshAlt: "\u5237\u65b0\u6309\u94ae",
                refreshTitle: "\u5237\u65b0\uff1a\u83b7\u53d6\u65b0\u7684\u56fe\u6807",
                successMessage: "\u9a8c\u8bc1\u6210\u529f",
                failedMessage: "\u9009\u9519\u4e86\uff0c\u91cd\u9009\u4e00\u6b21",
                verifingMessage: "\u9a8c\u8bc1\u4e2d..."
            },
            zh_tw: {
                explanation: "\u8acb\u9078\u64c7\u4e00\u4e0b\u5716\u6a19\u4e2d\u7684 ANSWER",
                refreshAlt: "\u5237\u65b0\u6309\u9215",
                refreshTitle: "\u5237\u65b0\uff1a\u7372\u53d6\u65b0\u7684\u5716\u6a19",
                successMessage: "\u9a57\u8b49\u6210\u529f",
                failedMessage: "\u9078\u932f\u4e86\uff0c\u91cd\u9078\u4e00\u6b21",
                verifingMessage: "\u9a57\u8b49\u4e2d..."
            }
        }
    }), d("visualcaptcha.jquery", ["jquery", "visualcaptcha", "visualcaptcha/templates", "visualcaptcha/language"], function(s, o, l, t) {
        "use strict";
        var n, r, a, c, u, d, f, h;
        n = function(e, t) {
            s.get(e, t, "json")
        }, r = function() {}, a = function(e, t, n) {
            var i, o = "",
                r = "";
            t.hasClass("visualCaptcha-verify-status") && ("success" !== r && (r = t.data("verify-result"), o = '<div class="visualCaptcha-cover"><img src="' + "" + '"/>' + e.language.failedMessage + "</div>", setTimeout(function() {
                t.removeClass("visualCaptcha-verify-status"), t.data("verify-result", ""), t.find(".visualCaptcha-action-area").removeClass("failed verifing"), t.find(".visualCaptcha-cover").addClass("visualCaptcha-hide")
            }, 1e3)));
            i = l.namespaceInput(n) + l.explanation(n, e.language) + '<div class="visualCaptcha-action-area ' + r + '">' + o + l.images(n) + l.buttons(n, e.language, e.imgPath) + "</div>", t.html(i)
        }, c = function(e, t) {
            t.find(".visualCaptcha-action-area").removeClass("failed").addClass("verifing").prepend('<div class="visualCaptcha-cover">' + e.language.verifingMessage + "</div>")
        }, u = function(e, t, n) {
            if (t.addClass("visualCaptcha-verify-status"), t.data("verify-result", n.result ? "success" : "failed"), n.result) {
                var i = "";
                t.find(".visualCaptcha-cover").remove(), t.find(".visualCaptcha-action-area").removeClass("failed verifing").addClass("success").prepend('<div class="visualCaptcha-cover"><img src="' + i + '">' + e.language.successMessage + "</div>")
            }
        }, d = function() {
            var e, t, n, i = s(this),
                o = i.closest(".visualCaptcha"),
                r = o.find(".visualCaptcha-possibilities"),
                a = o.find(".visualCaptcha-explanation");
            (t = a.find("input")) && (t.remove(), r.find(".img").removeClass("visualCaptcha-selected")), i.addClass("visualCaptcha-selected"), e = i.find("img").data("index"), n = l.imageInput(o.data("captcha"), e), a.append(s(n)), o.data("captcha").verify(e)
        }, f = function() {
            s(this).closest(".visualCaptcha").data("captcha").refresh()
        }, h = function(e) {
            var t = e.find(".imageField"),
                n = !! t.val();
            return n ? {
                valid: n,
                name: t.attr("name"),
                value: t.val()
            } : {
                valid: n
            }
        }, s.fn.visualCaptcha = function(e) {
            var i;
            return i = s.extend({
                imgPath: "/",
                language: t[e.captcha.locale],
                captcha: {
                    request: n
                }
            }, e), this.addClass("visualCaptcha").on("click", ".visualCaptcha-refresh-button", f).on("click", ".visualCaptcha-possibilities .img", d), this.each(function() {
                var e, t, n = s(this);
                t = s.extend({}, i.captcha, {
                    _loading: r.bind(null, i, n),
                    _loaded: a.bind(null, i, n),
                    _verifing: c.bind(null, i, n),
                    _verified: u.bind(null, i, n)
                }), void 0 !== n.data("namespace") && (t.namespace = n.data("namespace")), void 0 !== n.data("is-primary") && (t.isPrimary = n.data("is-primary")), (e = o(t)).getCaptchaData = h.bind(null, n), n.data("captcha", e)
            })
        }
    }), d("jquery", function() {
        return e
    }), u("visualcaptcha.jquery")
}), function() {
    window.GD || (window.GD = {}), GD.REGEXP = {
        email: /^(|(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9_]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6})$/i,
        link: /^(http:|https:)\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"\s])*$/,
        inlineLink: /(http:|https:)\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"\s])*/i,
        mobile: /^(13\d|14[5-8]|15[0-3,5-9]|16[56]|17[0135678]|18\d|19[189])\d{8}$/,
        globalMobile: /^\+?\d{1,19}$/,
        nickname: /^[a-zA-Z0-9_\u4e00-\u9fa5]+$/,
        provinceSuffix: /\u58ee\u65cf\u81ea\u6cbb\u533a|\u56de\u65cf\u81ea\u6cbb\u533a|\u7ef4\u543e\u5c14\u81ea\u6cbb\u533a|\u7279\u522b\u884c\u653f\u533a|\u7701|\u5e02|\u81ea\u6cbb\u533a$/i,
        telProtocol: /^tel:/,
        mobileKeywordRegex: /\u624b\u673a|phone|mobile|\u624b\u6a5f|\u884c\u52d5\u96fb\u8a71/i,
        emailKeywordRegex: /\u90ae\u7bb1|mailbox|postbox|email|\u90f5\u7bb1/i,
        withHan: /[\u3040-\u30ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff\uff66-\uff9f]/
    }
}.call(this), function(t, n) {
    function i(e, t) {
        var n = e.createElement("p"),
            i = e.getElementsByTagName("head")[0] || e.documentElement;
        return n.innerHTML = "x<style>" + t + "</style>", i.insertBefore(n.lastChild, i.firstChild)
    }
    function r() {
        var e = f.elements;
        return "string" == typeof e ? e.split(" ") : e
    }
    function o(e) {
        var n = {},
            i = e.createElement,
            o = (0, e.createDocumentFragment)();
        e.createElement = function(e) {
            return f.shivMethods ? (t = n[e] ? n[e].cloneNode() : d.test(e) ? (n[e] = i(e)).cloneNode() : i(e)).canHaveChildren && !u.test(e) ? o.appendChild(t) : t : i(e);
            var t
        }, e.createDocumentFragment = Function("h,f", "return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&(" + r().join().replace(/\w+/g, function(e) {
                return i(e), o.createElement(e), 'c("' + e + '")'
            }) + ");return n}")(f, o)
    }
    function e(e) {
        var t;
        return e.documentShived || (f.shivCSS && !a && (t = !! i(e, "article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio{display:none}canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden]{display:none}audio[controls]{display:inline-block;*display:inline;*zoom:1}mark{background:#FF0;color:#000}")), s || (t = !o(e)), t && (e.documentShived = t)), e
    }
    var a, s, l, c = t.html5 || {},
        u = /^<|^(?:button|form|map|select|textarea|object|iframe|option|optgroup)$/i,
        d = /^<|^(?:a|b|button|code|div|fieldset|form|h1|h2|h3|h4|h5|h6|i|iframe|img|input|label|li|link|ol|option|p|param|q|script|select|span|strong|style|table|tbody|td|textarea|tfoot|th|thead|tr|ul)$/i;
    (l = n.createElement("a")).innerHTML = "<xyz></xyz>", (a = "hidden" in l) && "function" == typeof injectElementWithStyles && injectElementWithStyles("#modernizr{}", function(e) {
        e.hidden = !0, a = "none" == (t.getComputedStyle ? getComputedStyle(e, null) : e.currentStyle).display
    }), s = 1 == l.childNodes.length ||
        function() {
            try {
                n.createElement("a")
            } catch (t) {
                return !0
            }
            var e = n.createDocumentFragment();
            return "undefined" == typeof e.cloneNode || "undefined" == typeof e.createDocumentFragment || "undefined" == typeof e.createElement
        }();
    var f = {
        elements: c.elements || "abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",
        shivCSS: !1 !== c.shivCSS,
        shivMethods: !1 !== c.shivMethods,
        type: "default",
        shivDocument: e
    };
    t.html5 = f, e(n)
}(this, document), function() {
    "use strict";
    var o, r, e = "undefined",
        a = "string",
        t = self.navigator,
        s = String,
        l = Object.prototype.hasOwnProperty,
        c = {},
        u = {},
        d = !1,
        f = !0,
        n = /^\s*application\/(?:vnd\.oftn\.|x-)?l10n\+json\s*(?:$|;)/i,
        h = "locale",
        p = "defaultLocale",
        m = "toLocaleString",
        _ = "toLowerCase",
        i = Array.prototype.indexOf ||
            function(e) {
                for (var t = this.length, n = 0; n < t; n++) if (n in this && this[n] === e) return n;
                return -1
            }, g = function(t) {
            var e = new o,
                n = {};
            e.open("GET", t, d), e.send(null);
            try {
                n = JSON.parse(e.responseText)
            } catch (i) {
                setTimeout(function() {
                    var e = new Error("Unable to load localization data: " + t);
                    throw e.name = "Localization Error", e
                }, 0)
            }
            return n
        }, v = s[m] = function(e) {
            if (0 < arguments.length && "number" != typeof e) if (typeof e === a) v(g(e));
            else if (e === d) u = {};
            else {
                var t, n, i;
                for (t in e) if (l.call(e, t)) {
                    if (n = e[t], (t = t[_]()) in u && n !== d || (u[t] = {}), n === d) continue;
                    if (typeof n === a) {
                        if (0 !== s[h][_]().indexOf(t)) {
                            t in c || (c[t] = []), c[t].push(n);
                            continue
                        }
                        n = g(n)
                    }
                    for (i in n) l.call(n, i) && (u[t][i] = n[i])
                }
            }
            return Function.prototype[m].apply(s, arguments)
        }, y = function(e) {
            for (var t, n = c[e], i = 0, o = n.length; i < o; i++)(t = {})[e] = g(n[i]), v(t);
            delete c[e]
        }, b = s.prototype[m] = function() {
            var e, t = r,
                n = s[t ? p : h][_]().split("-"),
                i = n.length,
                o = this.valueOf();
            r = d;
            do {
                if ((e = n.slice(0, i).join("-")) in c && y(e), e in u && o in u[e]) return u[e][o]
            } while (1 < i--);
            return !t && s[p] ? (r = f, b.call(o)) : o
        };
    if (typeof XMLHttpRequest === e && typeof ActiveXObject !== e) {
        var w = ActiveXObject;
        o = function() {
            try {
                return new w("Msxml2.XMLHTTP.6.0")
            } catch (e) {}
            try {
                return new w("Msxml2.XMLHTTP.3.0")
            } catch (t) {}
            try {
                return new w("Msxml2.XMLHTTP")
            } catch (n) {}
            throw new Error("XMLHttpRequest not supported by this browser.")
        }
    } else o = XMLHttpRequest;
    if (s[p] = s[p] || "", s[h] = t && (t.language || t.userLanguage) || "", typeof document !== e) for (var x, k = document.getElementsByTagName("link"), C = k.length; C--;) {
        var T = k[C],
            S = (T.getAttribute("rel") || "")[_]().split(/\s+/);
        n.test(T.type) && (-1 !== i.call(S, "localizations") ? v(T.getAttribute("href")) : -1 !== i.call(S, "localization") && ((x = {})[(T.getAttribute("hreflang") || "")[_]()] = T.getAttribute("href"), v(x)))
    }
}(), _.templateSettings = {
    evaluate: /\[\[(.+?)\]\]/g,
    interpolate: /\{\{(.+?)\}\}/g,
    escape: /\{\{-(.+?)\}\}/g
}, String.toLocaleString({
    en: {
        "%no_result": "No results found",
        "%rechoose": "rechoose",
        "%delete": "delete",
        "%warn_system_file": "System file is not allowed",
        "%attachment_media_type_support": "support: ",
        "%warn_exec_file": "EXE/BAT/HTML/HTM/SHTML/SHTM/JS/CSS format file is not allowed.",
        "%file_name_too_long": "File name is too long.",
        "%warn_oversize": "File size is over {{maxSize}}.",
        "%warn_invalid_filetype": "File type is not allowed.",
        "%warn_wrong_mobile_number": "<i class='gd-icon-times-circle'></i> Please enter correct Chinese mobile number",
        "%total": "total: ",
        "%total_with_currency": "total({{currency}}): ",
        "%download": "download",
        "%sold_out": "sold out",
        "%select_spec": "Please select {{labels}} first",
        "%common_separator": ", ",
        "%send_sms_verification": "Send Code",
        "%resend": "resend SMS",
        "%second": "s",
        "%sendingSMS": "sending SMS",
        "%warn_geo_cannot_get_location": "Can't get your location!",
        "%warn_geo_permission_denied": "You denied the request for Geolocation.",
        "%warn_geo_position_unavailable": "Location information is unavailable.",
        "%warn_geo_timeout": "The request to get your location timed out.",
        "%warn_geo_unknown_error": "An unknown error occurred.",
        "%geo_coord": "Longitude:{{long}},Latitude:{{lat}}",
        "%geo_long": "Longitude:{{long}}",
        "%geo_lat": "Latitude:{{lat}}",
        "%geo_address": "{{address}}",
        "%geo_choose": "Choose location",
        "%geo_locate": "Get current location",
        "%geo_locating": "Locating...",
        "%geo_no_address": "No address information. ",
        "%select_prompt": "Please select",
        "%no_geo_data": "There is no data for this field currently.",
        "%bracket": " ({{content}})",
        "%upload_failed": "Because your network is unstable, please try again.",
        "%upload_failed_400": "failed, changed to standard mode, please try again",
        "%upload_failed_401": "failed, please refresh page and try again",
        "%uploading": "Uploading...",
        "%upload_done": "Uploading finished!",
        "%max_file_quantity": "File quantity is over {{maxFileQuantity}}",
        "%page_number": "Page {{currentPage}}/{{totalPage}}",
        "%presence_error": "This field is required",
        "%quota_empty_error": "{{message}}, and submission is not allowed",
        "%mobile_verification_error": "{{label}}'s verification code is required",
        "%white_list_limit_error": "[{{fieldValue}}] is not allowed to submit",
        "%format_error": " format is wrong",
        "%email_format_error": "Please enter a valid Email address, such as support@jinshuju.net",
        "%name": "Name",
        "%email": "Email",
        "%contact_number": "Phone",
        "%id_card_format_error": "ID card number is invalid",
        "%choice_quota": " ({{quota}} left)"
    },
    "zh-CN": {
        "%no_result": "\u6ca1\u6709\u5339\u914d\u7684\u641c\u7d22\u7ed3\u679c",
        "%rechoose": "\u8bf7\u91cd\u65b0\u9009\u62e9",
        "%delete": "\u522a\u9664",
        "%warn_system_file": "\u7981\u6b62\u4e0a\u4f20\u7cfb\u7edf\u6587\u4ef6",
        "%attachment_media_type_support": "\u4ec5\u652f\u6301\uff1a",
        "%warn_exec_file": "\u7981\u6b62\u4e0a\u4f20EXE\u3001BAT\u3001HTML\u3001HTM\u3001SHTML\u3001SHTM\u3001JS\u3001CSS\u683c\u5f0f\u7684\u6587\u4ef6",
        "%file_name_too_long": "\u6587\u4ef6\u540d\u8fc7\u957f",
        "%warn_oversize": "\u6587\u4ef6\u8d85\u8fc7\u4e86{{maxSize}}",
        "%warn_excelx_oversize": ".xlsx\u6587\u4ef6\u8d85\u8fc7\u4e86{{maxExcelxSize}}",
        "%warn_invalid_filetype": "\u8be5\u7c7b\u578b\u6587\u4ef6\u4e0d\u5141\u8bb8\u4e0a\u4f20",
        "%warn_wrong_mobile_number": "<i class='gd-icon-times-circle'></i> \u8bf7\u8f93\u5165\u6b63\u786e\u7684\u4e2d\u56fd\u5927\u9646\u624b\u673a\u53f7\u7801",
        "%total": "\u5408\u8ba1\uff1a",
        "%total_with_currency": "\u5e94\u4ed8({{currency}})\uff1a",
        "%download": "\u4e0b\u8f7d",
        "%sold_out": "\u5df2\u552e\u7a7a",
        "%select_spec": "\u8bf7\u5148\u9009\u62e9{{labels}}",
        "%common_separator": "\u3001",
        "%send_sms_verification": "\u53d1\u9001\u9a8c\u8bc1\u77ed\u4fe1",
        "%resend": "\u91cd\u65b0\u53d1\u9001",
        "%second": "\u79d2",
        "%sendingSMS": "\u6b63\u5728\u53d1\u9001\u77ed\u4fe1",
        "%warn_geo_cannot_get_location": "\u65e0\u6cd5\u5b9a\u4f4d\u60a8\u7684\u4f4d\u7f6e\uff01",
        "%warn_geo_permission_denied": "\u65e0\u6cd5\u5b9a\u4f4d\u60a8\u7684\u4f4d\u7f6e\uff01\u8bf7\u6253\u5f00\u6d4f\u89c8\u5668\u7684\u4f4d\u7f6e\u5171\u4eab\u6743\u9650",
        "%warn_geo_position_unavailable": "\u65e0\u6cd5\u5b9a\u4f4d\u60a8\u7684\u4f4d\u7f6e\uff01\u4f4d\u7f6e\u4fe1\u606f\u4e0d\u53ef\u7528",
        "%warn_geo_timeout": "\u65e0\u6cd5\u5b9a\u4f4d\u60a8\u7684\u4f4d\u7f6e\uff01\u83b7\u53d6\u7ecf\u7eac\u5ea6\u8d85\u65f6",
        "%warn_geo_unknown_error": "\u65e0\u6cd5\u5b9a\u4f4d\u60a8\u7684\u4f4d\u7f6e\uff01\u672a\u77e5\u9519\u8bef",
        "%geo_coord": "\u7ecf\u5ea6:{{long}}\uff0c\u7eac\u5ea6:{{lat}}",
        "%geo_long": "\u7ecf\u5ea6:{{long}}",
        "%geo_lat": "\u7eac\u5ea6:{{lat}}",
        "%geo_address": "{{address}}",
        "%geo_choose": "\u83b7\u53d6\u5730\u7406\u4f4d\u7f6e",
        "%geo_locate": "\u83b7\u53d6\u5f53\u524d\u4f4d\u7f6e",
        "%geo_locating": "\u83b7\u53d6\u4f4d\u7f6e\u4e2d...",
        "%geo_no_address": "\u65e0\u6cd5\u83b7\u53d6\u5730\u5740\u3002",
        "%select_prompt": "\u8bf7\u9009\u62e9",
        "%no_geo_data": "\u8be5\u5730\u7406\u4f4d\u7f6e\u5b57\u6bb5\u6682\u65e0\u6570\u636e\u3002",
        "%bracket": "({{content}})",
        "%upload_failed": "\u56e0\u60a8\u7f51\u7edc\u4e0d\u7a33\u5b9a\uff0c\u8bf7\u91cd\u65b0\u4e0a\u4f20\u6587\u4ef6\u3002",
        "%upload_failed_400": "\u8be5\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u6781\u901f\u4e0a\u4f20\u6a21\u5f0f\uff0c\u73b0\u5df2\u8c03\u6574\u4e3a\u4f20\u7edf\u6a21\u5f0f\u3002\u8bf7\u9009\u62e9\u6587\u4ef6\u91cd\u65b0\u4e0a\u4f20\u3002",
        "%upload_failed_401": "\u4e0a\u4f20\u5931\u8d25\uff0c\u8bf7\u5237\u65b0\u9875\u9762\uff0c\u5e76\u57281\u5c0f\u65f6\u5185\u91cd\u65b0\u4e0a\u4f20",
        "%uploading": "\u4e0a\u4f20\u4e2d...",
        "%upload_done": "\u4e0a\u4f20\u6210\u529f\uff01",
        "%max_file_quantity": "\u6700\u591a\u53ea\u80fd\u4e0a\u4f20{{maxFileQuantity}}\u4e2a\u6587\u4ef6",
        "%page_number": "\u7b2c{{currentPage}}\u9875/\u5171{{totalPage}}\u9875",
        "%presence_error": "\u8bf7\u586b\u5199\u6b64\u9879",
        "%quota_empty_error": "{{message}}\uff0c\u65e0\u6cd5\u63d0\u4ea4",
        "%mobile_verification_error": "\u8bf7\u586b\u5199{{label}}\u9a8c\u8bc1\u7801",
        "%white_list_limit_error": "[{{fieldValue}}] \u4e0d\u80fd\u63d0\u4ea4",
        "%format_error": "\u683c\u5f0f\u4e0d\u5bf9",
        "%email_format_error": "\u8bf7\u8f93\u5165\u6b63\u786e\u7684\u90ae\u7bb1\u5730\u5740\uff0c\u5982support@jinshuju.net",
        "%name": "\u59d3\u540d",
        "%email": "\u8054\u7cfb\u90ae\u7bb1",
        "%contact_number": "\u8054\u7cfb\u7535\u8bdd",
        "%id_card_format_error": "\u8eab\u4efd\u8bc1\u53f7\u683c\u5f0f\u9519\u8bef",
        "%choice_quota": "\uff08\u4f59{{quota}}\uff09"
    },
    "zh-TW": {
        "%no_result": "\u6c92\u6709\u5339\u914d\u7684\u641c\u5c0b\u7d50\u679c",
        "%rechoose": "\u8acb\u91cd\u65b0\u9078\u64c7",
        "%delete": "\u522a\u9664",
        "%warn_system_file": "\u7981\u6b62\u4e0a\u8f09\u7cfb\u7d71\u6a94\u6848",
        "%attachment_media_type_support": "\u50c5\u652f\u63f4\uff1a",
        "%warn_exec_file": "\u7981\u6b62\u4e0a\u8f09EXE\u3001BAT\u3001HTML\u3001HTM\u3001SHTML\u3001SHTM\u3001JS\u3001CSS\u683c\u5f0f\u7684\u6a94\u6848",
        "%file_name_too_long": "\u6a94\u6848\u540d\u904e\u9577",
        "%warn_oversize": "\u6a94\u6848\u8d85\u904e\u4e86{{maxSize}}",
        "%warn_invalid_filetype": "\u8a72\u6a94\u6848\u985e\u578b\u4e0d\u5141\u8a31\u4e0a\u8f09",
        "%warn_wrong_mobile_number": "\u8acb\u8f38\u5165\u6b63\u78ba\u7684\u4e2d\u570b\u5927\u9678\u624b\u6a5f\u865f\u78bc",
        "%total": "\u5408\u8a08\uff1a",
        "%total_with_currency": "\u61c9\u4ed8({{currency}})\uff1a",
        "%download": "\u4e0b\u8f09",
        "%sold_out": "\u5df2\u552e\u7f44",
        "%select_spec": "\u8acb\u5148\u9078\u64c7{{labels}}",
        "%common_separator": "\u3001",
        "%send_sms_verification": "\u767c\u9001\u9a57\u8b49\u7c21\u8a0a",
        "%resend": "\u91cd\u65b0\u767c\u9001",
        "%second": "\u79d2",
        "%sendingSMS": "\u6b63\u5728\u767c\u9001\u7c21\u8a0a",
        "%warn_geo_cannot_get_location": "\u7121\u6cd5\u5b9a\u4f4d\u60a8\u7684\u4f4d\u7f6e\uff01",
        "%warn_geo_permission_denied": "\u7121\u6cd5\u5b9a\u4f4d\u60a8\u7684\u4f4d\u7f6e\uff01\u8acb\u6253\u958b\u700f\u89bd\u5668\u7684\u4f4d\u7f6e\u5171\u7528\u8a31\u53ef\u6b0a",
        "%warn_geo_position_unavailable": "\u7121\u6cd5\u5b9a\u4f4d\u60a8\u7684\u4f4d\u7f6e\uff01\u4f4d\u7f6e\u8cc7\u8a0a\u4e0d\u53ef\u7528",
        "%warn_geo_timeout": "\u7121\u6cd5\u5b9a\u4f4d\u60a8\u7684\u4f4d\u7f6e\uff01\u7372\u53d6\u7d93\u7def\u5ea6\u8d85\u6642",
        "%warn_geo_unknown_error": "\u7121\u6cd5\u5b9a\u4f4d\u60a8\u7684\u4f4d\u7f6e\uff01\u672a\u77e5\u932f\u8aa4",
        "%geo_coord": "\u7d93\u5ea6:{{long}}\uff0c\u7def\u5ea6:{{lat}}",
        "%geo_long": "\u7d93\u5ea6:{{long}}",
        "%geo_lat": "\u7def\u5ea6:{{lat}}",
        "%geo_address": "{{address}}",
        "%geo_choose": "\u7372\u53d6\u5730\u7406\u4f4d\u7f6e",
        "%geo_locate": "\u7372\u53d6\u7576\u524d\u4f4d\u7f6e",
        "%geo_locating": "\u7372\u53d6\u4f4d\u7f6e\u4e2d...",
        "%geo_no_address": "\u7121\u6cd5\u7372\u53d6\u5730\u5740\u3002",
        "%select_prompt": "\u8acb\u9078\u64c7",
        "%no_geo_data": "\u8a72\u5730\u7406\u4f4d\u7f6e\u5b57\u6bb5\u66ab\u7121\u6578\u64da\u3002",
        "%bracket": "\uff08{{content}}\uff09",
        "%upload_failed": "\u56e0\u60a8\u7db2\u8def\u4e0d\u7a69\u5b9a\uff0c\u8acb\u91cd\u65b0\u4e0a\u8f09\u6587\u4ef6\u3002",
        "%upload_failed_400": "\u8a72\u700f\u89bd\u5668\u4e0d\u652f\u63f4\u6975\u901f\u4e0a\u8f09\u6a21\u5f0f\uff0c\u73fe\u5df2\u8abf\u6574\u70ba\u50b3\u7d71\u6a21\u5f0f\u3002\u8acb\u9078\u64c7\u6a94\u6848\u91cd\u65b0\u4e0a\u8f09\u3002",
        "%upload_failed_401": "\u4e0a\u8f09\u5931\u6557\uff0c\u8acb\u5237\u65b0\u9801\u9762\uff0c\u4e26\u57281\u5c0f\u6642\u5167\u91cd\u65b0\u4e0a\u8f09",
        "%uploading": "\u4e0a\u8f09\u4e2d...",
        "%upload_done": "\u4e0a\u8f09\u6210\u529f\uff01",
        "%max_file_quantity": "\u6700\u591a\u53ea\u80fd\u4e0a\u8f09{{maxFileQuantity}}\u500b\u6a94\u6848",
        "%page_number": "\u7b2c{{currentPage}}\u9801/\u5171{{totalPage}}\u9801",
        "%presence_error": "\u8acb\u586b\u5beb\u6b64\u9805",
        "%quota_empty_error": "{{message}}\uff0c\u7121\u6cd5\u63d0\u4ea4",
        "%mobile_verification_error": "\u8acb\u586b\u5beb{{label}}\u9a57\u8b49\u78bc",
        "%white_list_limit_error": "[{{fieldValue}}] \u4e0d\u80fd\u63d0\u4ea4",
        "%format_error": "\u683c\u5f0f\u4e0d\u5c0d",
        "%email_format_error": "\u8acb\u8f38\u5165\u6b63\u78ba\u7684\u96fb\u90f5\u5730\u5740\uff0c\u5982support@jinshuju.net",
        "%name": "\u59d3\u540d",
        "%email": "\u806f\u7e6b\u90f5\u7bb1",
        "%contact_number": "\u806f\u7e6b\u96fb\u8a71",
        "%id_card_format_error": "\u8eab\u5206\u8b49\u5b57\u865f\u683c\u5f0f\u932f\u8aa4",
        "%choice_quota": "\uff08\u9918{{quota}}\uff09"
    }
});
var l = function(e, t) {
    return null == t && (t = {}), _.template(e.toLocaleString())(t)
};
String.locale = "undefined" != typeof I18n ? I18n.locale : "zh-CN", function() {
    window.GD || (window.GD = {}), GD.htmlSafe = function(e) {
        return _.escape(e)
    }, GD.htmlSafeWithLineBreak = function(e) {
        return GD.htmlSafe(e).replace(/\n/g, "<br/>")
    }, GD.htmlSafeWithParagraph = function(e) {
        var t;
        if (t = GD.htmlSafe(e).replace(/\r\n+/g, "\n"), 0 < (t = $.trim(t)).length) return "<p>" + (t = t.replace(/\n\n+/g, "</p><p>")) + "</p>"
    }
}.call(this), function() {
    window.GD || (window.GD = {}), GD.isRetina = function() {
        return 1 < window.devicePixelRatio
    }, GD.isIE = function() {
        return "ie" === Detectizr.browser.name
    }, GD.isFirefox = function() {
        return "firefox" === Detectizr.browser.name
    }, GD.isMac = function() {
        return /Mac/i.test(navigator.userAgent)
    }, GD.isAndroidDevice = function() {
        return 0 < navigator.userAgent.indexOf("Android")
    }, GD.isOpenInWeiXin = function() {
        return 0 < navigator.userAgent.indexOf("MicroMessenger") && navigator.userAgent.indexOf("WindowsWechat") < 0
    }, GD.isLowVersionIE = function() {
        return "ie" === Detectizr.browser.name && parseInt(Detectizr.browser.version, 10) < 10
    }
}.call(this), function() {
    var s, c;
    window.GD || (window.GD = {}), GD.isFloat = function(e) {
        return -1 !== e.toString().indexOf(".") && (e = parseFloat(e), Number(e) === e && e % 1 != 0)
    }, String.prototype.underscore = function() {
        return this.trim().replace(/([a-z\d])([A-Z]+)/g, "$1_$2").replace(/[-\s]+/g, "_").toLowerCase()
    }, String.prototype.dasherize = function() {
        return this.replace(/_/g, "-")
    }, String.prototype.replaceAll = function(e, t) {
        return this.replace(new RegExp(e, "g"), t)
    }, String.prototype.trunc = function(e) {
        return this.length > e ? this.substring(0, e) + "..." : this
    }, String.prototype.toVariable = function() {
        var e, t, n, i;
        for (i = window, e = 0, t = (n = this.split(".")).length; e < t && (i = i[n[e]]); e++);
        return i
    }, GD.getOpacityFromBackgroundColorCss = function(e) {
        var t;
        if (t = /rgba\(((\d){1,3},\s?){3}(.+)\)/gm.exec(e)) return parseFloat(t[t.length - 1])
    }, GD.hasPresentString = function(e) {
        return _.all([!_.isUndefined(e), !_.isNull(e), e])
    }, $.fn.removeClassRegExp = function(s) {
        return $(this).removeClass(function(e, t) {
            var n, i, o, r, a;
            for (i = [], o = 0, r = (a = t.split(" ")).length; o < r; o++) n = a[o], s.test(n) && i.push(n);
            return i.join(" ")
        }), this
    }, $.fn.isInViewport = function(e) {
        var t, n, i, o;
        return null == e && (e = 0), t = (n = $(this).offset().top + e) + $(this).outerHeight(), i = (o = $(window).scrollTop()) + $(window).height(), o < t && n < i
    }, jQuery.extend({
        getQueryParameters: function(e) {
            return -1 === (e = e || document.location.href).indexOf("?") ? {} : e.split("?")[1].split("&").map(function(e) {
                return this[(e = e.split("="))[0]] = e[1], this
            }.bind({}))[0]
        }
    }), GD.stringLengthWithoutHtmlTag = function(e) {
        var t;
        return ((null != (t = e.match(/<p>\s<\/p>/g)) ? t.length : void 0) || 0) + e.replace(/<[^>]*>|/g, "").replace(/\$\([^)]*\)/g, "").replace(/^\s*|\s*$|\n\n/gm, "").trim().length
    }, GD.addParamToUrl = function(e, t, n) {
        var i;
        return t && n ? ((i = $.getQueryParameters(e))[t] = n, e.split("?")[0] + "?" + $.param(i)) : e
    }, GD.formatDateTime = function(e) {
        return moment(e, moment.ISO_8601).format("YYYY-MM-DD HH:mm:ss")
    }, GD.delay = function(e, t) {
        return setTimeout(t, e)
    }, GD.updateMathJax = function() {
        return "undefined" != typeof MathJax && null !== MathJax ? MathJax.Hub.Queue(["Typeset", MathJax.Hub]) : void 0
    }, GD.recalcFormHeight = function() {
        return $(window).trigger("customLoad")
    }, GD.removeFileSuffix = function(e) {
        return e.substr(0, e.lastIndexOf("."))
    }, GD.isEmpty = function(e) {
        return null === e || "" === e
    }, GD.isNumber = function(e) {
        return !isNaN(parseFloat(e)) && isFinite(e)
    }, GD.isPhoneLink = function(e) {
        return GD.REGEXP.telProtocol.test(e)
    }, GD.formatDate = function(e) {
        return _.isDate(e) ? moment(e).format("YYYY-MM-DD") : e
    }, GD.pascalCase = function(e) {
        var t;
        return (t = $.camelCase(e)).substring(0, 1).toUpperCase() + t.substring(1)
    }, GD.prettyFormatNumber = function(e, t, n, i) {
        var o, r, a;
        return null == i && (i = !1), void 0 === e || GD.isEmpty(e) ? "" : n ? (o = s(e), t ? ((r = t - 2) < 0 && (r = 0), o.toFixed(r) + "%") : o + "%") : (a = t ? parseFloat(e).toFixed(t) : e, i ? c(a) : a)
    }, s = function(e) {
        var t, n, i;
        return (i = e.toString().split(".")).length < 2 ? 100 * e : (n = 0 === (t = i[1].length) ? i[1] + "00" : 1 === t ? i[1] + "0" : 2 === t ? i[1] : i[1].slice(0, 2) + "." + i[1].slice(2), parseFloat("" + i[0] + n))
    }, c = function(e) {
        var t;
        return (t = e.toString().split("."))[0] = t[0].replace(/\B(?=(\d{3})+(?!\d))/g, ","), t.join(".")
    }, GD.parseDate = function(e) {
        var t, n;
        return t = new Date, "" === e || null == e ? null : ("yesterday" === e ? e = "before_1" : "tomorrow" === e && (e = "after_1"), "today" === e ? t : -1 !== e.indexOf("before") ? (n = parseInt(e.split("_")[1]), t.setDate(t.getDate() - n), t) : -1 !== e.indexOf("after") ? (n = parseInt(e.split("_")[1]), t.setDate(t.getDate() + n), t) : new Date(e))
    }, GD.extractExistedQueryParams = function() {
        var e, t;
        return e = {}, url("?order") && (e.order = url("?order")), url("?per_page") && (e.per_page = url("?per_page")), url("?query") && (e.query = decodeURIComponent(url("?query"))), url("?serial_number") && (e.serial_number = url("?serial_number")), url("?start") && (e.start = url("?start")), url("?end") && (e.end = url("?end")), $.isEmptyObject(null != (t = GD.filterParams) ? t.data : void 0) || (e = $.extend(e, GD.filterParams.data)), e
    }, GD.createKeyboardEvent = function(e) {
        var t;
        return (t = $.Event("keydown")).keyCode = e, t.customEvent = !0, t
    }, GD.renderQrcode = function(e, t, n) {
        var i, o;
        return Modernizr.canvas ? "function" == typeof(i = e.empty()).qrcode ? i.qrcode({
            size: n,
            text: t
        }) : void 0 : "function" == typeof(o = e.empty()).qrcode ? o.qrcode({
            render: "div",
            size: n,
            text: t
        }) : void 0
    }, GD.validateFile = function(e, t, n, i) {
        var o, r;
        return o = {
            maxExcelxSize: 1024e3,
            simple: !1
        }, i = $.extend({}, o, i || {}), r = [], 0 < e.name.indexOf("%3A") || ("." === e.name.substr(0, 1) && r.push(l("%warn_system_file")), 200 < e.name.length && r.push(l("%file_name_too_long")), n && !n.test(e.name) ? r.push(l("%warn_invalid_filetype")) : /.*\.(exe|bat|html|htm|shtml|shtm|js|css)$/gi.test(e.name) && r.push(l("%warn_exec_file"))), e.size && e.size > t && r.push(l(i.simple ? "%warn_oversize_simple" : "%warn_oversize", {
            maxSize: GD.numberToHumanSize(t)
        })), e.size && e.size > i.maxExcelxSize && /.*\.(xlsx)$/gi.test(e.name) && r.push(l("%warn_excelx_oversize", {
            maxExcelxSize: GD.numberToHumanSize(i.maxExcelxSize)
        })), r
    }, GD.validateURL = function(e) {
        return !$.trim(e) || /^(https:\/\/|http:\/\/)?(((([a-zA-Z]|\d|-|\.|_|~)|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-zA-Z]|\d)|(([a-zA-Z]|\d)([a-zA-Z]|\d|-|\.|_|~)*([a-zA-Z]|\d)))\.)+(([a-zA-Z])|(([a-zA-Z])([a-zA-Z]|\d|-|\.|_|~)*([a-zA-Z])))\.?)(:\d*)?)(\/((([a-zA-Z]|\d|-|\.|_|~)|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-zA-Z]|\d|-|\.|_|~)|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-zA-Z]|\d|-|\.|_|~)|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?(\#((([a-zA-Z]|\d|-|\.|_|~)|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/.test($.trim(e))
    }, GD.countDownWithUndo = function(t, n, i, o) {
        var r, e, a, s, l;
        return i || (i = I18n.t("javascript.common.second")), l = null, r = $(t), a = r.first().text(), s = function() {
            var e;
            return e = a + "(" + (n + i) + ")", r.text(e), n--
        }, e = function(e) {
            if (clearInterval(l), r.text(a), GD.enableBtn(t), e) return "function" == typeof o ? o() : void 0
        }, t.addClass("disabled"), n && (s(), l = setInterval(function() {
            if (s(), n < 0) return e(!0)
        }, 1e3)), e
    }, GD.countDown = function(e, t, n, i) {
        var o;
        return null == n && (n = I18n.t("javascript.common.resend")), null == i && (i = null), 0 < t ? (e.addClass("disabled"), o = n + " (" + t + ")", e.is("input") ? (e.prop("disabled", !0), e.val(o)) : e.text(o), t--, setTimeout(function() {
            return GD.countDown(e, t, n, i)
        }, 1e3)) : (e.is("input") ? (e.prop("disabled", !1), e.val(n)) : e.text(n), i && i(e), GD.enableBtn(e))
    }, GD.countDownRedirect = function(e, t, n, i) {
        if (url("path") !== t) return 0 < n ? (e.text(i + " (" + n + "s)"), n--, setTimeout(function() {
            return GD.countDownRedirect(e, t, n, i)
        }, 1e3)) : Turbolinks.visit(t)
    }, GD.isMobileNumber = function(e) {
        return /^1\d{10}$/.test(e)
    }, GD.getStringLength = function(e) {
        var t;
        return e ? (t = e.match(/[^x00-xff]/gi), e.length + (t ? t.length : 0)) : 0
    }, GD.numberToHumanSize = function(e) {
        var t, n;
        return e ? (t = e / 1024) < 1024 ? t.toFixed(0) + " KB" : (n = t / 1024) < 1024 ? n.toFixed(1) + " MB" : (n / 1024).toFixed(1) + " GB" : null
    }, GD.numberToCurrencyFloat = function(e) {
        return parseFloat(e).toFixed(2)
    }, GD.PLACEHOLDER_REPLACE_REGEX = /\$\([^\)]+\)/g, GD.FORMULA_PLACEHOLDER_REPLACE_REGEX = /((SUM|MAX|MIN|AVG|COUNT)\(\$\(.+?\)\)|\$\(.+?\))/g, GD.pollingDataFromServer = function(e, t, n, i, o) {
        var r, a;
        return null == o && (o = null), r = 0, a = null, a = setInterval(function() {
            return $.getJSON(n, function(e) {
                return t < r ? (clearInterval(a), null !== o ? o("polling finished without successfully") : void 0) : (r++, i(e, a))
            }).fail(function() {
                if (clearInterval(a), null !== o) return o()
            })
        }, e)
    }, GD.visualCaptcha = function(e, t, n, i) {
        return null == n && (n = "zh_cn"), e.visualCaptcha({
            captcha: {
                url: "/gd_captcha",
                numberOfImages: t,
                locale: n.replace("-", "_").toLowerCase(),
                callbacks: {
                    verified: function(e, t) {
                        return i(t)
                    }
                }
            }
        })
    }, GD.SYSTEM_TAGS = {
        ALL_FORMS_TAG_ID: "desktop",
        ALL_FOLDERS_TAG_ID: "all_folders",
        UNTAGGED_ID: "untagged",
        SHARED_FORMS_TAG_ID: "shared_forms"
    }, GD.toSentence = function(e) {
        return e ? e.join(l("%common_separator")).replace(/\s/g, "") : ""
    }, $.fn.serializeObject = function() {
        var e, t;
        return t = {}, e = this.serializeArray(), $.each(e, function() {
            return void 0 !== t[this.name] ? (t[this.name].push || (t[this.name] = [t[this.name]]), t[this.name].push(this.value || "")) : t[this.name] = this.value || ""
        }), t
    }, GD.preloadImage = function(e) {
        return _.each(e, function(e) {
            return (new Image).src = e
        })
    }, GD.inRecoverMode = function() {
        return !!url("?recover")
    }, GD.isFormWorthToRecover = function(e, t) {
        var n, i;
        return 0 < (null != e && null != (n = e.fields) ? n.length : void 0) || 0 < (null != e && null != (i = e.description) ? i.length : void 0) || t
    }, GD.draftsClear = function(e) {
        var t;
        return e || (t = $.cookie("_caid")), _.each(["formDraftToken", "formDraft", "formThemeDraft"], function(e) {
            return localStorage.removeItem(t ? e + ":" + t : e)
        })
    }, GD.getDrafts = function(t, e) {
        var n;
        return n = _.map(["formDraftToken", "formDraft", "formThemeDraft"], function(e) {
            return localStorage.getItem(t ? e + ":" + t : e)
        }), e && GD.draftsClear(!t), n
    }, GD.checkUnexpectedForm = function(e) {
        var t, n, i, o, r, a, s, l, c;
        if (!GD.inRecoverMode()) return t = $.cookie("_caid"), s = GD.getDrafts(t), o = s[0], n = s[1], r = s[2], n || r || (l = GD.getDrafts(), o = l[0], n = l[1], r = l[2], c = !0), n || r ? (i = JSON.parse(n), a = JSON.parse(r), GD.isFormWorthToRecover(i, a) ? GD.showConfirmBox(I18n.t("javascript.form.check_unexpected_form_title"), I18n.t("javascript.form.check_unexpected_form_content") + " <br><br> <strong>" + i.name + "</strong>", {
            successCallback: function() {
                var e;
                return e = (o ? "/forms/" + o + "/edit" : "/forms/new") + "?recover=\u2713", Turbolinks.visit(e)
            },
            cancelCallback: function() {
                return null != e && e.resolve(), GD.draftsClear(c)
            },
            staticBackdrop: !0,
            successText: I18n.t("javascript.common.recover"),
            cancelText: I18n.t("javascript.common.abandon")
        }) : GD.draftsClear(c)) : null != e ? e.resolve() : void 0
    }, GD.checkClientRecoveryConflict = function(e) {
        return GD.enabledClientRecovery ? GD.showConfirmBox(I18n.t("javascript.form.check_client_recovery_conflict.title"), I18n.t("javascript.form.check_client_recovery_conflict.description"), {
            successText: I18n.t("javascript.form.check_client_recovery_conflict.confirm"),
            successBtnClass: "gd-btn-primary-solid",
            hideCancelBtn: !0,
            successCallback: function() {
                return null != e ? e.resolve() : void 0
            }
        }) : null != e ? e.resolve() : void 0
    }, GD.cacheToLocalStorage = function(e, t, n) {
        try {
            return "undefined" != typeof localStorage && null !== localStorage ? localStorage.setItem(e, t) : void 0
        } catch (i) {
            return i, n ? "undefined" != typeof localStorage && null !== localStorage ? localStorage.clear() : void 0 : ("undefined" != typeof localStorage && null !== localStorage && localStorage.removeItem("columbusCachedformCreateModal"), "undefined" != typeof localStorage && null !== localStorage && localStorage.removeItem("formCreateModalCached6"), GD.cacheToLocalStorage(e, t, !0))
        }
    }, GD.cookieExpireMinutes = function(e) {
        var t;
        return (t = new Date).setTime(t.getTime() + 60 * e * 1e3), t
    }, GD.cookieExpireSeconds = function(e) {
        var t;
        return (t = new Date).setTime(t.getTime() + 1e3 * e), t
    }, GD.inDashboardPage = function() {
        return 0 < $(".dashboard").length
    }, GD.inFormDesignPage = function() {
        return 0 < $("#form_design").length
    }, GD.onSystemPage = function() {
        return 0 < $("#account_overview").length
    }, $.validator && $.extend($.validator.methods, {
        mobile: function(e, t) {
            return this.optional(t) || GD.REGEXP.mobile.test(e)
        }
    }), GD.showSetPhoneNOModal = function(e) {
        return e.stopPropagation(), e.preventDefault(), GD.loadRemoteModalByID("#set_phone_no_modal", {
            modalSize: "modal-sm",
            params: {
                modal_dir: "shared"
            }
        })
    }, GD.stripSpecialSpaces = function(e) {
        var t;
        return null != e && null != (t = e.replace(String.fromCharCode(8236), "")) ? t.replace(String.fromCharCode(8237), "") : void 0
    }, GD.stripUnwantedCharsInMobileNo = function(e) {
        var t;
        return null != (t = GD.stripSpecialSpaces(e)) ? t.replace(/\s*/g, "") : void 0
    }, GD.updateBulkDownloadContent = function(e, t) {
        return e.find(".attachment-bulk-task-content").hide(), e.find(".bulk-download-container").show().html(t).find(".click-to-download-previous").hide()
    }, GD.initWeixinOwnQrcodeTooltip = function(e) {
        return e.tooltipster() && e.tooltipster("destroy"), e.gdHoverTooltip({
            content: $(".collect-info-by-own-img"),
            position: "top"
        })
    }, $(".bind-mobile-required").find(".qrcode-download-list.bind-mobile-required-element > a").livequery(function() {
        return $(this).on("click", function(e) {
            return GD.showSetPhoneNOModal(e)
        })
    }), $(document).on("turbolinks:load", function() {
        if (GD.isFusionUi = $("body").hasClass("fusion-ui"), $("body").hasClass("bind-mobile-required")) return $(".bind-mobile-required").on("click", ".bind-mobile-required-element:not(.qrcode-download-list)", function(e) {
            return GD.showSetPhoneNOModal(e)
        })
    })
}.call(this), function() {
    window.GD || (window.GD = {}), GD.setLocaleAccordingLang = function() {
        return I18n.locale = $("html").attr("lang") || "zh-CN"
    }, $(function() {
        return I18n.fallbacks = !0, GD.setLocaleAccordingLang(), GD.disableMobileFeatures = $("html").data("disable-mobile-feature"), GD.fromChina = $("html").data("from-china"), $(document).on("turbolinks:load", function() {
            return GD.setLocaleAccordingLang()
        })
    }), "undefined" != typeof I18n && null !== I18n && GD.setLocaleAccordingLang(), GD.fromChina = $("html").data("from-china")
}.call(this), function() {
    window.GD || (window.GD = {}), GD.showLoading = function(e, t, n) {
        return null == e && (e = "#entries_grid"), null == t && (t = "entries"), null == n && (n = ""), 0 === $(e).find(".cover").length && $(e).append("<div class='cover " + n + "'></div>"), $(".loading[data-target=" + t + "]").show()
    }, GD.hideLoading = function(e, t) {
        return $(e).find(".cover").remove(), $(".loading[data-target=" + t + "]").hide()
    }, GD.loadWithLoading = function(e, t, n) {
        return GD.showLoading(t, n), t.load(e, function() {
            return GD.hideLoading(t, n)
        })
    }
}.call(this), function() {
    var e, i;
    $(".select2-search__field").livequery(function() {
        if ($(this).addClass("stop-immed-pp"), $(this).parent().is(".select2-search--inline") && $(this).prop("disabled", !0), GD.isMobile) return $(this).on("click", function() {
            return $(this).focus()
        })
    }), $(".need-select2:visible").livequery(function() {
        var e, t, n, i, o, r, a, s, l;
        if (a = {
                language: I18n.locale || "zh-CN"
            }, $(this).data("overflow-hidden") && (a.dropdownCssClass = "overflow-hidden"), (n = (e = $(this)).data("dropdown-parent-selector")) && (a.dropdownParent = $(n)), r = function(e) {
                return _(e.parent().find("[data-role=select_filter]")).reduce(function(e, t) {
                    var n;
                    return (n = $(t)).val() && (e[n.data("filter-key")] = n.val()), e
                }, {})
            }, $(this).data("ajax--url") && (a.ajax = {
                delay: $(this).data("ajax--delay") || 250,
                cache: !0
            }, $(this).data("ajax--filter") && (a.ajax.data = function(e) {
                return {
                    q: e.term || e.q,
                    filters: r($(this))
                }
            })), t = null != (s = e.data("select2configuration")) ? s.toVariable() : void 0) for (i in _.extendOwn(a, t.options), l = t.events) o = l[i], $(this).on(i, o.bind(this));
        return ("function" == typeof a.backdrop ? a.backdrop() : a.backdrop) && ($(this).on("select2:open", function() {
            var e;
            return (e = $(this).data("select2")).$dropdown.before("<div class='select2-backdrop'></div>"), e.$container.addClass("select2-container-with-dropdown")
        }), $(this).on({
            "select2:close": function() {
                return $("body").find(".select2-backdrop").remove(), $(this).data("select2").$container.removeClass("select2-container-with-dropdown")
            }
        })), $(this).select2(a)
    }), i = function(e, t) {
        return 0 === t.indexOf(e) || 0 === t.indexOf(e.match(/.{1,4}/g).join(" "))
    }, $(".need-select2-manual:visible").livequery(function() {
        var t, n;
        return t = {
            language: String.locale
        }, $(this).data("overflow-hidden") && (t.dropdownCssClass = "overflow-hidden"), $(this).data("ajax--url") && (t.ajax = {
            delay: 250,
            cache: !0
        }), $.fn.select2.amd.require(["select2/compat/matcher"], (n = this, function(e) {
            return $(n).siblings("b.dropdown-bg").remove().end().siblings("i.dropdown-trigger").remove(), t.matcher = e(i), $(n).select2(t)
        }))
    }), e = function(t) {
        var e, n, i, o;
        return (e = t.dropdown.$dropdown).find(".select2-search").length ? e.find(".select2-search__field").val("").focus() : (i = $('<input class="select2-search__field" type="search" tabindex="0" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" role="textbox" autofocus>'), n = $('<span class="select2-search select2-search--dropdown">').html(i), o = t.selection.$search, i.on("input", function() {
            return o.val(i.val()), o.trigger("input")
        }), i.on("keyup", function(e) {
            switch (e.keyCode) {
                case 38:
                    return t.trigger("results:previous");
                case 40:
                    return t.trigger("results:next");
                case 13:
                    return t.trigger("results:toggle")
            }
        }), e.prepend(n))
    }, $(document).on("select2:open", ".need-select2[multiple]", function() {
        return e($(this).data("select2"))
    }), $(document).on("select2:select", ".need-select2[multiple]", function(e) {
        return $(e.params.originalEvent.currentTarget).trigger("mouseenter")
    }), $(".select2-selection--multiple").livequery(function() {
        var e;
        if (e = $(this).closest(".select2").data("element").data("prompt")) return $(this).find(".select2-search").prepend("<span class='select2-selection__prompt'>" + GD.htmlSafe(e) + "</span>")
    })
}.call(this), function() {
    var s, e, t;
    window.GD || (window.GD = {}), GD.switcheryMainColor = "#48b65a", GD.adaptDevice = function(e) {
        var t;
        return t = GD.isMobile ? "mlarge" : "xlarge", e ? "" + e + t : t
    }, GD.addRetinaSuffix = function(e, t) {
        return e + "@" + t + (GD.isMobile || !GD.isRetina() ? "" : "Retina")
    }, GD.adaptRetina = function() {
        var e, t, n;
        if ((t = $(".need-adapt-retina")).length) return e = GD.adaptDevice(t.data("img-prefix")), n = GD.addRetinaSuffix(t.data("img-url"), e), t.attr("src", n)
    }, GD.adaptVerticalPoistion = function(e) {
        var t;
        return t = ($(window).height() - e.height()) / 2, e.css({
            top: t
        })
    }, GD.focusToEnd = function(e) {
        var t;
        return "" === (t = e.val()) || /\n$/.test(t) || (t += "\n"), e.focus().val("").val(t)
    }, GD.writeContentToIframe = function(e, t) {
        var n;
        return (n = $(e)[0].contentWindow.document).open(), n.write(t), n.close()
    }, GD.isTextOverflow = function(e) {
        var t;
        return !!(t = e[0]) && t.scrollWidth > t.offsetWidth
    }, GD.helpDocumentQuestionMark = function(e) {
        var t;
        return "<i class='help-document-tooltip gd-icon-help-circle-o tooltipstered' data-title='" + (t = GD.helpDocumentJson && GD.helpDocumentJson[e] || {}).title + "' data-content='" + t.content + "' data-hyperlink-text='" + t.hyperlink_text + "' data-hyperlink-text-url='" + t.hyperlink_text_url + "' data-id='" + e + "' title='" + t.title + "'></i>"
    }, GD.showTooltipErrorIfHave = function(e, t) {
        if (t) return e.parent().is(".gd-input-prepend, .gd-input-append") ? e.parent().addClass("has-error") : e.wrap("<div class='has-error'>"), e.gdCustomTooltip({
            content: "<div class='error'><i class='gd-icon-times-circle'></i> " + t + "</div>"
        }).tooltipster("show")
    }, GD.clearTooltipError = function(e) {
        if (e.parent(".gd-input-prepend, .gd-input-append").is(".has-error") ? e.parent().removeClass("has-error") : e.parent().is(".has-error") && e.unwrap(), e.hasClass("tooltipstered")) return e.tooltipster("destroy")
    }, GD.showTooltipFlashMessage = function(e, t, n, i) {
        var o;
        return null == i && (i = "bottom"), o = function() {
            switch (t) {
                case "success":
                    return "<div class='success'><i class='gd-icon-check-circle'></i> " + n + "</div>";
                case "error":
                    return "<div class='error'><i class='gd-icon-times-circle'></i> " + n + "</div>";
                default:
                    return n
            }
        }(), e.hasClass("tooltipstered") && e.tooltipster("destroy"), e.gdCustomTooltip({
            content: o,
            position: i,
            timer: 2e3
        }).tooltipster("show")
    }, GD.updateChoiceSpecView = function(i) {
        if (null != i) return _.delay(function() {
            var e, t, n;
            if ((e = $(i).find(".choice-spec .text")) && (85 < e.height() || 55 < (null != (t = e[0]) && null != (n = t.innerText) ? n.length : void 0))) return e.closest(".choice-spec").find(".look-more-spec-text").removeClass("hide")
        }, 0)
    }, GD.showErrorMessageBelow = function(e, t) {
        var n;
        if (e && t) return n = $("<div class='error-message'>" + t + "</div>"), e.parent().is(".gd-input-prepend, .gd-input-append") && (e = e.parent()), e.wrap("<div class='has-error'>"), e.after(n)
    }, GD.clearErrorMessageBelow = function(e) {
        if (e) return e.parent().is(".gd-input-prepend, .gd-input-append") && (e = e.parent()), e.parent().is(".has-error") ? (e.parent().find(".error-message").remove(), e.unwrap()) : void 0
    }, GD.showErrorMessageBesides = function(e, t, n, i) {
        var o;
        if (null == n && (n = !1), null == i && (i = !1), o = i ? "" : "<i class='gd-icon-times-circle'></i>", 0 === $(e).find(".inline-error-message").length && $(e).append("<div class='inline-error-message'>" + o + t + "</div>"), !n) return setTimeout(function() {
            return $(e).find(".inline-error-message").fadeOut().remove()
        }, 3e3)
    }, GD.removeErrorMessageBesides = function(e) {
        return $(e).find(".inline-error-message").fadeOut().remove()
    }, GD.initClipboard = function(t) {
        return function() {
            return GD.showFlashNotification(I18n.t("javascript.global.warn_browser_not_supported"), "danger")
        }, $(t).mouseenter(function() {
            var e;
            if (!$(t).data("clipboardInitialied") && !$(t).is(".disabled")) return e = new Clipboard(t), $(t).data("clipboardInitialied", !0), e.on("success", function(e) {
                return GD.showFlashNotification($(e.trigger).data("message") || I18n.t("javascript.global.copy_success"))
            }), e.on("error", function() {
                var e;
                return e = GD.isMac() ? I18n.t("javascript.global.mac_copy_shortcut") : I18n.t("javascript.global.others_copy_shortcut"), $(t).hasClass("tooltipstered") ? $(t).tooltipster("content", e) : $(t).gdClickTooltip({
                    content: e,
                    theme: "gd-tooltip-mini"
                }).tooltipster("show")
            })
        })
    }, GD.disableBtn = function(e) {
        var t;
        if (0 < (t = $(e)).length && !t.hasClass("disabled")) return t.data("disabled-with") && t.data("disable-with", t.data("disabled-with")), GD.disableElement(t)
    }, GD.enableBtn = function(e) {
        var t;
        if (0 < (t = $(e)).length && t.hasClass("disabled")) return t.removeClass("disabled"), $.rails.enableElement(t)
    }, GD.disableElement = function(e) {
        if (e.length) return $.rails.disableElement(e), e.addClass("disabled")
    }, GD.enableElement = function(e) {
        if (e.length) return $.rails.enableElement(e), e.removeClass("disabled disabled-with-cursor-auto")
    }, GD.syncHeight = function(e, t) {
        return t.css({
            height: e.outerHeight()
        })
    }, s = function(t, e) {
        var n;
        return n = {
            showInput: !0,
            showButtons: !1,
            showAlpha: !0,
            containerClassName: "gd-spectrum-container",
            replacerClassName: "gd-spectrum-replacer",
            preferredFormat: "rgb",
            move: function(e) {
                return t.val(e).trigger("change")
            }
        }, t.spectrum($.extend(n, null != e ? e : {}))
    }, GD.initSpectrums = function(e, t) {
        var n, i, o, r, a;
        for (null == t && (t = null), a = [], i = 0, o = (r = e.find("[data-role=color-picker]")).length; i < o; i++) n = r[i], a.push(s($(n), t));
        return a
    }, $(document).on("focusin", ".sp-container .sp-input", function(e) {
        return e.stopImmediatePropagation()
    }), GD.updateModalHeight = function(e, t, n, i) {
        var o, r, a, s, l;
        if (null == t && (t = ".modal-body"), null == n && (n = null), null == i && (i = null), 0 !== (o = $(e).find(t)).length) return n || (n = $(e).find(".modal-header").outerHeight() + (null != (l = $(e).find(".modal-footer").outerHeight()) ? l : 0)), a = r = .8 * $(window).height() - n, s = $(e).find(".modal-dialog"), o.get(0).scrollHeight > r ? ($(s).css({
            top: "1%"
        }), a = .9 * $(window).height() - n) : $(s).css({
            top: "10%"
        }), o.css({
            "max-height": a + "px"
        }), i ? i(a) : void 0
    }, GD.updateSubmitBtn = function() {
        var e, t, n, i, o;
        return (o = null != (t = (i = $(".submit-field input.submit, .entry-show .actions [data-role='submit']")).data("fileUploading")) ? t : 0) < 0 && i.data("fileUploading", 0), e = null != (n = 0 < o || i.data("no-goods-selected") || i.data("weixin-openid-fetching")) && n, i.attr("disabled", e)
    }, GD.showConfirmBox = function(e, t, n) {
        var i;
        return null == n && (n = {}), i = "<div id='gd_confirm_modal' class='modal light " + (n["class"] || "") + "' tabindex='-1' role='dialog' hidden='true'" + (n.staticBackdrop ? " data-backdrop=static" : void 0) + ">\n  <div class='modal-dialog modal-sm'>\n    <div class='modal-content'>\n      <div class='modal-header'>\n        <h4 class=\"modal-title\">\n          " + (n.state ? "<i class='gd-icon-" + n.state + " text-" + n.state + " state-icon'></i>" : "") + "\n          " + e + "\n          " + (n.showCloseBtn ? '<button type="button" class="close" data-dismiss="modal"><span>\xd7</span></button>' : "") + "\n        </h4>\n      </div>\n      <div class='modal-body clearfix'> " + t + " </div>\n      <div class='modal-footer'>\n        <a data-role='ok' class='gd-btn gd-btn-primary " + (n.successBtnClass || "") + "' href='javascript:void(0)'>" + (n.successText || I18n.t("javascript.common.action_confirmed")) + "</a>\n        " + (n.hideCancelBtn ? "" : "<a data-dismiss='modal' class='gd-btn gd-btn-info " + (n.cancelBtnClass || "") + "' href='javascript:void(0)'>" + (n.cancelText || I18n.t("javascript.common.action_cancel")) + "</a>") + "\n      </div>\n    </div>\n  </div>\n</div>", $("#gd_confirm_modal").remove(), $("body").append(i), $("#gd_confirm_modal").modal("show"), $("#gd_confirm_modal [data-role=ok]").one("click", function() {
            return $(this).closest(".modal").modal("hide"), "function" == typeof n.successCallback ? n.successCallback() : void 0
        }), $("#gd_confirm_modal [data-dismiss=modal]").one("click", function() {
            return "function" == typeof n.cancelCallback ? n.cancelCallback() : void 0
        })
    }, GD.updateRadioBtnGroupStatus = function(e) {
        var t;
        return (t = e.is(".gd-btn") ? e : e.closest(".gd-btn")).siblings(".gd-btn.selected").removeClass("selected"), t.addClass("selected")
    }, GD.turbolinksReloadAndShowMessage = function(e) {
        return $(document).one("turbolinks:load", function() {
            return GD.showFlashNotification(e)
        }), GD.turbolinksReloadWithCurrentPosition()
    }, GD.turbolinksVisitAndShowMessage = function(e, t, n) {
        return null == n && (n = "success"), $(document).one("turbolinks:load", function() {
            return GD.showFlashNotification(t, n)
        }), Turbolinks.visit(e)
    }, GD.turbolinksReloadWithCurrentPosition = (t = void 0, e = function() {
        return t = [window.scrollX, window.scrollY], Turbolinks.visit(window.location.toString(), {
            action: "replace"
        })
    }, document.addEventListener("turbolinks:load", function() {
        if (t) return window.scrollTo.apply(window, t), t = null
    }), e), GD.insertFieldsBaseTooltip = function(e, t) {
        return null == t && (t = null), $(e).gdClickTooltip({
            contentCloning: !1,
            autoClose: !1,
            theme: "field-placeholder-selector gd-tooltip-menu-over",
            content: $(e).next(".gd-hide").find(".field-placeholder-insertion"),
            functionReady: function(e) {
                if (setTimeout(function() {
                        return $(document).one("click", "*:not(.tooltipster-content)", function() {
                            return e.tooltipster("hide")
                        })
                    }, 100), t) return t()
            },
            functionAfter: function() {
                return $(document).off("click", "*:not(.tooltipster-content)")
            }
        })
    }, GD.bindKeyNav = function(i, o) {
        return null == o && (o = {}), $(document).one("page:fetch", function() {
            return $(document).off("keydown.nav")
        }), $(document).on("keydown.nav", function(e) {
            var t, n;
            if (!$(".fancybox-container.fancybox-is-open").is(":visible") && !$(e.target).is("input:visible:not(:submit), textarea, select") && 2 === (n = i ? $(i).find(".nav-arrows a") : $(".nav-arrows a")).length && (t = function() {
                    switch (e.keyCode) {
                        case 37:
                            return n.first();
                        case 39:
                            return n.last();
                        default:
                            return null
                    }
                }()) && t.is(":not(.disabled)")) return o.target ? (o.beforeSend && o.beforeSend(), $(o.target).load(t.attr("href"), o.afterSend)) : Turbolinks.visit(t.attr("href"))
        })
    }, GD.toggleWithInput = function(e, t, n, i) {
        var o, r;
        if (null == n && (n = !0), o = $(e), r = n ? 200 : 0, t ? o.slideDown(r, i) : o.slideUp(r, i), o.find("input, select").prop("disabled", !t), o.is("option")) return o.prop("disabled", !t)
    }, _.templateSettings = {
        evaluate: /\[\[(.+?)\]\]/g,
        interpolate: /\{\{(.+?)\}\}/g,
        escape: /\{\{-(.+?)\}\}/g
    }, $(document).on("turbolinks:load ajax:complete", function() {
        var e;
        if (0 !== (e = $("a[data-role=copy]")).length) return _.each(e, function(e) {
            if (!$("body").hasClass("bind-mobile-required") || !$(e).hasClass("copy-form-link")) return GD.initClipboard(e)
        })
    }), $(document).on("turbolinks:load ajax:complete", function() {
        return $(".radio-card input:checked").closest(".radio-card").addClass("active")
    }), $(document).on("change", ".radio-card input", function() {
        var e;
        return (e = $("[name='" + $(this).attr("name") + "']")).closest(".radio-card.active").removeClass("active"), e.filter(":checked").closest(".radio-card").addClass("active")
    }), $(document).on("click", "a[data-disabled-with], input[type=submit][data-disabled-with]", function() {
        return GD.disableBtn($(this))
    }), $(document).on("click", ".search-box .search-icon", function() {
        return $(this).siblings("input[type=search]").focus()
    }), $(document).on("change", ".search-box input[type=search]", function() {
        var e;
        return e = !! $.trim($(this).val()), $(this).toggleClass("has-value", e)
    }), $(document).on("click", ".gd-btn-radio-group .gd-btn", function() {
        return GD.updateRadioBtnGroupStatus($(this))
    }), $(document).on("click", "a.disabled, a.prevent-default", function(e) {
        return e.preventDefault()
    }), $(document).on("click", "#switch_to_mobile", function() {
        return $.removeCookie("platform", {
            path: "/",
            domain: $(this).data("root-domain")
        })
    }), $(document).on("change", ".change-submit", function() {
        if (!$(this).data("need-upgrade")) return $(this).closest("form").submit()
    }), $(document).on("ajax:complete", "form.need-ajax-flash", function(e, t, n) {
        return "success" === n ? GD.showFlashNotification($(this).data("success-flash") || I18n.t("javascript.form.setting_saved_success")) : GD.showFlashNotification($(this).data("error-flash") || I18n.t("javascript.form.setting_saved_failed"), "danger")
    }), $(".need-fixed-column:visible").livequery(function() {
        return $(this).fixedColumn()
    }), $(".need-drop-select").livequery(function() {
        return $(this).dropselect({
            clear: !1,
            icons: !1,
            filter: {
                placeholder: "",
                noresult: I18n.t("javascript.global.no_result")
            }
        })
    }), $(".need-count-down").livequery(function() {
        var e, t, n, i;
        return i = (e = $(this)).data("second") || 5, n = e.attr("href"), t = e.data("basetext") || e.text(), GD.countDownRedirect(e, n, i, t)
    }), $(document).on("focusin", "input.stop-immed-pp", function(e) {
        return e.stopImmediatePropagation()
    }), GD.triggerShowModal = function() {
        var e, t;
        if (t = url("?modal_trigger_id")) return (e = $("#" + decodeURIComponent(t))).livequery(function() {
            return e.trigger("click")
        })
    }, GD.shakeElement = function(e) {
        return e.addClass("gd-animated gd-animation-shake"), setTimeout(function() {
            return e.removeClass("gd-animated gd-animation-shake")
        }, 500)
    }, $(document).on("turbolinks:load", function() {
        return GD.isMobile = 0 < $(".mobile-device").length, GD.isPhone = 0 < $(".phone-device").length, setTimeout(GD.triggerShowModal, 100), GD.adaptRetina()
    }), $("[data-feature-name]").livequery(function() {
        var n, i, e, o, t, r, a, s, l;
        if (o = $(this).data("feature-name").underscore(), $(this).is("option")) {
            if ($(this).data("need-upgrade")) return n = $(this).closest("select"), r = n.val(), i = $(this).attr("value"), n.on("focusin", function() {
                return $(this).data("previous-value", $(this).val())
            }), n.on("change", (l = this, function(e) {
                var t;
                return (t = n.val()) !== i ? n.data("previous-value", t) : (r = n.data("previous-value") || r, n.find("option[value=" + r + "]").prop("selected", !0), e.stopPropagation(), e.stopImmediatePropagation(), "modal" === $(l).data("dismiss") && n.closest(".modal").modal("hide"), "modal" === $(l).data("toggle") ? GD.loadRemoteModalByID("#paid_feature_" + o + "_modal", $(l).data("modal-params")) : void 0)
            }))
        } else if ("multi_data_filter" === o && $(this).is(".paid-feature") && 0 === $(this).next(".gd-btn-paid-feature").length && (e = _.contains(GD.PRO2_FEATURES, o) ? I18n.t("javascript.common.paid_feature_pro2") : _.contains(GD.ENT2_FEATURES, o) ? I18n.t("javascript.common.paid_feature_ent2") : I18n.t("javascript.common.paid_feature"), a = $(this).data("paid-feature-label") || e, s = $(this).data("remote-modal"), t = $(this).data("modal-params"), $(this).after(" <a class='gd-btn gd-btn-paid-feature' data-modal-params='" + JSON.stringify(t) + "' data-target='#paid_feature_" + o + "_modal' data-remote-modal='" + s + "' data-toggle='modal'>" + a + "</a>")), $(this).data("need-upgrade")) return $(this).attr({
            "data-toggle": "modal",
            "data-target": "#paid_feature_" + o + "_modal"
        })
    }), $(".click-to-pay-feature-trial").livequery(function() {
        return $(this).on("click", function() {
            var e;
            return e = "/forms/new" === location.pathname || /^\/forms\/\w*\/edit$/.test(location.pathname), $("#start_feature_trial").data("hide-enterprise-features-modal", e)
        })
    }), $.fn.shuffleChildren = function(e) {
        var t, n, i, o;
        for (i = e ? ":not(:first-child)" : "", (n = $(this.get())).find(".other-choice-area, .other-choice-item") && (o = n.children(":last-child"), i += ":not(:last-child)"), t = n.children(i); t.length;) n.append(t.splice(Math.floor(Math.random() * t.length), 1)[0]);
        if (o) return n.append(o)
    }
}.call(this), function() {
    window.GD || (window.GD = {}), GD.showFlashNotification = function(e, t) {
        if (null == t && (t = "success"), "" !== $.trim(e)) return $(".flash-notifications").removeClass("fixed").empty().notify({
            message: {
                html: "" + e
            },
            type: t,
            closable: !1,
            fadeOut: {
                enabled: !0,
                delay: 2e3
            }
        }).show()
    }, GD.showFixedNotification = function(e, t) {
        return null == t && (t = "success"), $(".flash-notifications").addClass("fixed").empty().notify({
            message: {
                html: e
            },
            type: t,
            closable: !1,
            fadeOut: {
                enabled: !1
            }
        }).show(), $(".flash-notifications .dismiss").click(function() {
            return $(".flash-notifications").removeClass("fixed").empty()
        })
    }, $(document).on("turbolinks:load", function() {
        var t, e;
        if ((e = $(".flash-notifications").data("message")) && !_.isEmpty(e) && (e.notice && GD.showFlashNotification(_.escape(e.notice)), e.success && GD.showFlashNotification(_.escape(e.success)), e.warning && GD.showFlashNotification(_.escape(e.warning), "warning"), e.alert && GD.showFlashNotification(_.escape(e.alert), "danger"), e.error && GD.showFlashNotification(_.escape(e.error), "danger")), 0 < $(".system-warnings").length && $(".system-warnings").on("click", "a:not([data-dismiss=false])", function() {
                var e, t, n;
                return t = $(this).closest(".slick-slide"), n = $(this).closest(".system-warning"), (e = $(".system-warnings")).slick("slickRemove", t.data("slick-index"), !1), 0 === $(".system-warning").length && $(".system-warnings").slideUp(), $.ajax({
                    url: e.data("dismiss-path"),
                    data: {
                        type: n.data("type"),
                        media: "system",
                        id: n.data("message-id")
                    },
                    type: "post"
                }).always(function() {
                    if (e.slick("unslick"), "" !== e.text()) return e.slick({
                        dots: !0,
                        autoplay: !0,
                        fade: !0,
                        speed: 500,
                        arrows: !1
                    })
                })
            }), 0 < $(".user-vas-warnings").length) return t = function(e) {
            return e.css("height", ""), e.nextAll().removeClass("more-system-warning")
        }, $(".user-vas-warnings").on("click", ".user-vas-warning .close-warning-message", function() {
            var e;
            return (e = $(this).closest(".user-vas-warnings")).slideUp(), t(e), $.post(e.data("dismiss-path"))
        }), $(".user-vas-warnings").on("click", ".user-vas-warning .toggle-more-plan-warning", function() {
            var e;
            return (e = $(".user-vas-warnings")).hasClass("full-page") ? t(e) : e.css("height", $(window).height()).nextAll().addClass("more-system-warning"), $(this).find(".show-more").toggle().end().find(".hide-more").toggle(), e.toggleClass("full-page")
        }), $(".user-vas-warnings").on("click", ".system-warning-contact-us", function() {
            return $(".zhichi-custom-btn").trigger("click")
        })
    })
}.call(this), function() {
    $ && $.validator && ($.validator.addMethod("gdPhone", function(e, t) {
        return this.optional(t) || GD.REGEXP.mobile.test(GD.stripUnwantedCharsInMobileNo(e))
    }, I18n.t("javascript.global.validator.mobile_format")), $.validator.addMethod("gdEmailOrMobileNo", function(e, t) {
        return this.optional(t) || GD.REGEXP.mobile.test(GD.stripUnwantedCharsInMobileNo(e)) || GD.REGEXP.email.test(e.trim())
    }, GD.fromChina ? I18n.t("javascript.global.validator.email_or_mobile_format") : I18n.t("javascript.global.validator.email_format")), $.validator.addMethod("conditionRequired", $.validator.methods.required, I18n.t("javascript.global.validator.condition_required")), $.validator.addMethod("gdEmail", function(e, t) {
        return this.optional(t) || GD.REGEXP.email.test(e)
    }, I18n.t("javascript.global.validator.email_format")), $.validator.addMethod("gdNickname", function(e, t) {
        return this.optional(t) || GD.REGEXP.nickname.test(e)
    }, I18n.t("javascript.global.validator.nickname_format")), $.validator.addMethod("gdResult", function(t, e) {
        var n, i, o, r, a, s;
        return n = $(e).closest("[data-field-combinations]").find(".field-combination-container:not(.gd-hide)"), i = $(e).closest(".field-combination-container"), a = i.find("select").map(function() {
            return $(this).val()
        }).toArray(), s = n.index(i), o = n.slice(0, s), r = _.compact(a), _.uniq(r).length !== r.length ? ([], _.uniq(r).forEach(function(e) {
            return r.splice(r.indexOf(e), 1)
        }), !r.some(function(e) {
            return e === t
        })) : this.optional(e) || o.toArray().every(function(e) {
                return $(e).find("select").map(function() {
                        return $(this).val()
                    }).toArray().sort().toString() !== a.sort().toString()
            })
    }, I18n.t("javascript.global.validator.duplicate_group")), $.validator.addClassRules("gdresult-customer-validation", {
        conditionRequired: !0,
        gdResult: !0
    }))
}.call(this), function() {
    GD.getMobileVerifyCode = function(e, t) {
        var n, i, o;
        return n = $(e), (o = $("#set_mobile_no_form .mobile-no-error")).hide(), i = {
            mobile_no: $("#set_mobile_no_form input.input-phone").val().replace(/\s/g, "")
        }, $.post(n.data("url"), i, function(e) {
            var t;
            return t = null != e ? e.cooling_time : void 0, GD.countDown(n, t || 60)
        }).fail(function(e) {
            if (GD.enableBtn(n), 400 === e.status) return t ? t(e.responseJSON.error.mobile) : o.show().html(e.responseJSON.error.mobile)
        })
    }
}.call(this), function() {
    var c;
    window.GD || (window.GD = {}), c = function(e) {
        var t, n;
        return $(".bind-page-box").addClass("hide"), t = $(".bind-page-box").filter(e), (n = $(".weixin-intro-container").find("form .field .mobile-field-container input").val()) && t.find(".mobile-number").text(n), t.removeClass("hide")
    }, GD.bindEmailProcess = function(e) {
        var n, i, o;
        if (0 !== (n = $(e)).length) return n.on("click", ".intro-container .go-next", function() {
            return c(".identity-input-container")
        }), n.on("click", ".outro-container .go-prev", function() {
            return c(".identity-input-container")
        }), i = n.find("form.bind-identity-form"), o = i.validate({
            errorLabelContainer: i.find(".error"),
            errorClass: "invalid gd-icon-times-circle",
            errorElement: "div",
            rules: {
                "user_identity[email]": {
                    required: !0,
                    gdEmail: !0
                }
            },
            messages: {
                "user_identity[email]": {
                    required: I18n.t("javascript.global.validator.email_required")
                }
            }
        }), i.on("click", "a.bind-identity-submit-btn:not([disabled])", function() {
            if (i.valid()) return $(this).attr("disabled", !0), i.submit()
        }), i.on("ajax:complete", function(e, t) {
            return i.find(".bind-identity-submit-btn").attr("disabled", !1), 200 === t.status ? (c(".outro-container"), n.find("a.email-link").attr("href", t.responseJSON.email_homepage)) : t.responseJSON.error ? o.showErrors({
                "user_identity[email]": t.responseJSON.error
            }) : void 0
        })
    }, GD.bindMobileProcess = function(e) {
        var a, t, s, n, l;
        if (0 !== (a = $(e)).length) return a.on("click", ".intro-container .go-next", function() {
            return c(".identity-input-container")
        }), t = (s = a.find("form.bind-identity-form")).find(".error"), n = s.find(".input-phone"), l = s.validate({
            errorLabelContainer: t,
            errorClass: "invalid gd-icon-times-circle",
            errorElement: "div",
            rules: {
                mobile_no: {
                    required: !0,
                    gdPhone: !0
                },
                new_mobile_verification_code: {
                    required: function() {
                        return l.element(n)
                    }
                }
            },
            messages: {
                mobile_no: {
                    required: I18n.t("javascript.global.validator.phone_required")
                },
                new_mobile_verification_code: {
                    required: I18n.t("javascript.global.validator.verification_code_required")
                }
            }
        }), a.on("click", "a.zhichi-btn", function() {
            return $(".zhichi-custom-btn").trigger("click")
        }), s.on("click", "a.send-verification-code:not(.disabled)", function() {
            if (l.element(n)) return GD.getMobileVerifyCode(this)
        }), s.on("click", "a.bind-identity-submit-btn", function() {
            var e;
            if (e = $(this), s.valid() && !e.attr("disabled")) return e.attr("disabled", !0), s.submit()
        }), s.on("ajax:complete", function(e, t) {
            var n, i, o, r;
            if (200 === t.status) {
                if (null != (r = t.responseJSON) ? r.migratable : void 0) return i = t.responseJSON, a.find("[name=confirmed]").prop("checked", !0), a.find(".form-container").addClass("hide"), a.find(".confirm-container").removeClass("hide"), a.find(".confirm-container .confirm-mobile span").text(i.mobile_no), a.find(".confirm-container .confirm-form span").text(i.forms_count), a.find(".confirm-container .confirm-entry span").text(i.entries_count), a.find(".zhichi-btn").hide();
                if (0 === $(".bind-page-box.outro-container").length && 0 === $(".bind-page-box .outro-container").length) return;
                return c(".outro-container"), n = $(".bind-success-link"), GD.countDownRedirect(n, n.attr("href"), 5, n.data("basetext"))
            }
            if (s.find(".bind-identity-submit-btn").attr("disabled", !1), o = t.responseJSON.error.token || t.responseJSON.error.mobile) return l.showErrors({
                new_mobile_verification_code: o
            })
        })
    }, $(document).on("turbolinks:load", function() {
        if (0 < $(".bind-mobile-page").length) return GD.bindMobileProcess(".bind-mobile-page")
    })
}.call(this), window.url = function() {
    function o() {}
    function u(e) {
        return decodeURIComponent(e.replace(/\+/g, " "))
    }
    function r(e, t) {
        var n = e.charAt(0),
            i = t.split(n);
        return n === e ? i : i[(e = parseInt(e.substring(1), 10)) < 0 ? i.length + e : e - 1]
    }
    function a(e, t) {
        for (var n = e.charAt(0), i = t.split("&"), o = [], r = {}, a = [], s = e.substring(1), l = 0, c = i.length; l < c; l++) if ((o = i[l].match(/(.*?)=(.*)/)) || (o = [i[l], i[l], ""]), "" !== o[1].replace(/\s/g, "")) {
            if (o[2] = u(o[2] || ""), s === o[1]) return o[2];
            (a = o[1].match(/(.*)\[([0-9]+)\]/)) ? (r[a[1]] = r[a[1]] || [], r[a[1]][a[2]] = o[2]) : r[o[1]] = o[2]
        }
        return n === e ? r : r[s]
    }
    return function(e, t) {
        var n, i = {};
        if ("tld?" === e) return o();
        if (t = t || window.location.toString(), !e) return t;
        if (e = e.toString(), n = t.match(/^mailto:([^\/].+)/)) i.protocol = "mailto", i.email = n[1];
        else {
            if ((n = t.match(/(.*?)\/#\!(.*)/)) && (t = n[1] + n[2]), (n = t.match(/(.*?)#(.*)/)) && (i.hash = n[2], t = n[1]), i.hash && e.match(/^#/)) return a(e, i.hash);
            if ((n = t.match(/(.*?)\?(.*)/)) && (i.query = n[2], t = n[1]), i.query && e.match(/^\?/)) return a(e, i.query);
            if ((n = t.match(/(.*?)\:?\/\/(.*)/)) && (i.protocol = n[1].toLowerCase(), t = n[2]), (n = t.match(/(.*?)(\/.*)/)) && (i.path = n[2], t = n[1]), i.path = (i.path || "").replace(/^([^\/])/, "/$1").replace(/\/$/, ""), e.match(/^[\-0-9]+$/) && (e = e.replace(/^([^\/])/, "/$1")), e.match(/^\//)) return r(e, i.path.substring(1));
            if ((n = r("/-1", i.path.substring(1))) && (n = n.match(/(.*?)\.(.*)/)) && (i.file = n[0], i.filename = n[1], i.fileext = n[2]), (n = t.match(/(.*)\:([0-9]+)$/)) && (i.port = n[2], t = n[1]), (n = t.match(/(.*?)@(.*)/)) && (i.auth = n[1], t = n[2]), i.auth && (n = i.auth.match(/(.*)\:(.*)/), i.user = n ? n[1] : i.auth, i.pass = n ? n[2] : void 0), i.hostname = t.toLowerCase(), "." === e.charAt(0)) return r(e, i.hostname);
            o() && ((n = i.hostname.match(o())) && (i.tld = n[3], i.domain = n[2] ? n[2] + "." + n[3] : void 0, i.sub = n[1] || void 0)), i.port = i.port || ("https" === i.protocol ? "443" : "80"), i.protocol = i.protocol || ("443" === i.port ? "https" : "http")
        }
        return e in i ? i[e] : "{}" === e ? i : void 0
    }
}(), "undefined" != typeof jQuery && jQuery.extend({
    url: function(e, t) {
        return window.url(e, t)
    }
}), function() {
    window.GD || (window.GD = {}), GD.initWeixinLogin = function(e) {
        if (0 < e.length && "undefined" != typeof WxLogin && null !== WxLogin && e.data("redirect-uri")) return new WxLogin({
            id: "weixin_login",
            appid: e.data("appid"),
            scope: "snsapi_login,snsapi_userinfo",
            redirect_uri: e.data("redirect-uri"),
            state: e.data("state"),
            href: e.data("css-href")
        })
    }
}.call(this), function() {
    var t;
    t = function() {
        return GD.initWeixinLogin($(".social-account-weixin, .social-account.account-weixin")), $("#weixin_login_section").children(".back").data("session-type", $(".login-panel").is(":visible") ? "login" : "signup"), $(".login-switcher, .login-panel, .signup-panel").hide(), $("#weixin_login_section").show()
    }, $(document).on("turbolinks:load", function() {
        if (!$(".social-account-weixin, .social-account.account-weixin").data("redirect-to")) return "weixin" === url("#") && t(), 0 !== $(".social-account.account-new-weixin").length && null != GD.currentSessionId && (GD.channel = GD.pusher.subscribe("session_user_" + GD.currentSessionId), GD.channel.bind("wx_qrcode_done", function(e) {
            return null != e.message.bind_done ? ($("#weixin_user_sign_form input.uid").val(e.message.uid), $("#weixin_user_sign_form input.token").val(e.message.token), $("#weixin_user_sign_form").submit()) : $(".weixin-status-text").empty().text(I18n.t("javascript.onboarding.warn.weixin_account_in_use")).addClass("error").show()
        })), $(".social-account-weixin, .social-account.account-weixin").on("click", function() {
            var e;
            return (e = $(this).data("redirect-to")) ? window.location = e : t()
        }), $("#weixin_login_section").on("click", "> .back", function() {
            return $("#weixin_login_section").hide(), "login" === $(this).data("session-type") ? ($(".login-panel, .login-switcher:first").show(), $(".signup-panel").hide()) : ($(".login-panel, .login-switcher + .login-switcher").hide(), $(".signup-panel").show())
        })
    }), $(document).on("turbolinks:load", function() {
        if ($(".weixin-signup-panel").length) return $(".weixin-signup-panel .create-new-account").on("click", "a", function(e) {
            return GD.disableBtn($(e.target))
        })
    })
}.call(this), function() {
    var c, u, d;
    window.GD || (window.GD = {}), d = {
        minlength: I18n.t("javascript.onboarding.warn.password_min_length"),
        required: I18n.t("javascript.onboarding.warn.password_cannot_be_empty")
    }, u = GD.fromChina ? I18n.t("javascript.onboarding.warn.account_cannot_be_empty") : I18n.t("javascript.onboarding.warn.email_cannot_be_empty"), c = function(e, t) {
        var n;
        return n = e.closest("form"), t ? (GD.enableBtn(n.find(":submit")), n.valid()) : GD.disableBtn(n.find(":submit"))
    }, GD.identityValidate = function(e, t) {
        var n, i;
        return i = {
            ignore: ".ignore-validate",
            errorClass: "validate-invalid gd-icon-times-circle",
            validClass: "validate-valid",
            onkeyup: !1,
            focusInvalid: !1,
            errorLabelContainer: n = $(e).find(".identity-validate-container"),
            submitHandler: function(e) {
                var t, n;
                return (n = (t = $(e)).find("#identity_mobile_no")).val(GD.stripUnwantedCharsInMobileNo(n.val())), t.find("button:submit").prop("disabled", !0), e.submit()
            },
            highlight: function(e) {
                return $(e).closest("form").find("button:submit").prop("disabled", !0), $(e).addClass("has-error").removeClass("has-success")
            },
            unhighlight: function(e) {
                return $(e).closest("form").find("button:submit").prop("disabled", !1), $(e).addClass("has-success").removeClass("has-error")
            },
            onclick: function(e) {
                if ("remember_me" !== $(e).attr("id")) return $(e).closest("form").find("button:submit").prop("disabled", !e.checked)
            },
            rules: t.rules,
            messages: t.messages
        }, $(e).on("focus", "input", function() {
            var e;
            if (n = $(this).closest("form").find(".identity-validate-container"), e = $(this).attr("id"), n.find("#" + e + "-error").remove(), $("#" + e).removeClass("has-error"), !_.some(n.children(), function(e) {
                    return $(e).text()
                })) return n.empty().hide()
        }), t.validateOptions && _.extend(i, t.validateOptions), e.validate(i)
    }, $(document).on("turbolinks:load", function() {
        var e, t, n, i, o, r, a, s, l;
        if (e = $("#new_identity").not(".before-check"), t = $("#reset_password").not(".before-check"), e.length && (n = e), t.length && (n = t), n) return s = !! n.hasClass("retrieve-password"), a = n.data("check-presence-url"), r = {
            retrieve_password: s,
            identity: {
                email_or_mobile_no: $(this).parent().find("#identity_email_or_mobile_no").val()
            }
        }, {
            retrieve_password: s,
            identity: {
                email: $(this).parent().find("#identity_email").val()
            }
        }, s ? I18n.t("javascript.onboarding.forgot_password.warn_invalid_email") : I18n.t("javascript.onboarding.warn.invalid_email"), o = {
            required: s ? I18n.t("javascript.onboarding.forgot_password.warn_account_cannot_be_empty") : u,
            remote: s ? I18n.t("javascript.onboarding.forgot_password.warn_invalid_email") : I18n.t("javascript.onboarding.warn.account_in_use")
        }, l = {
            rules: {
                "identity[email_or_mobile_no]": {
                    required: !0,
                    gdEmailOrMobileNo: !0,
                    remote: {
                        url: a,
                        data: r
                    }
                },
                "identity[password]": {
                    required: !0,
                    minlength: 6
                },
                "identity[email]": {
                    required: !0,
                    gdEmail: !0
                },
                "identity[nick_name]": {
                    gdNickname: !0,
                    rangelength: [2, 20],
                    remote: {
                        async: !1,
                        url: a
                    }
                },
                "identity[mobile_no]": {
                    required: !0,
                    gdPhone: !0,
                    normalizer: GD.stripUnwantedCharsInMobileNo
                },
                _rucaptcha: {
                    required: !0,
                    remote: {
                        url: "/captcha/verify",
                        complete: function(e) {
                            if ("true" === e.responseText) return $(this).find(".send-verification-sms-code").removeClass("disabled")
                        }
                    }
                },
                sms_verification_code: {
                    required: !0
                },
                terms_agreed: {
                    required: !0
                }
            },
            messages: {
                "identity[email_or_mobile_no]": o,
                "identity[nick_name]": {
                    remote: I18n.t("javascript.onboarding.warn.nickname_in_use"),
                    rangelength: I18n.t("javascript.onboarding.warn.nickname_in_use")
                },
                "identity[email]": {
                    required: I18n.t("javascript.onboarding.warn.email_cannot_be_empty"),
                    email: I18n.t("javascript.onboarding.warn.email_format_invalid")
                },
                "identity[password]": d,
                "identity[mobile_no]": {
                    mobile_no: I18n.t("javascript.onboarding.warn.mobile_format_invalid"),
                    required: I18n.t("javascript.onboarding.warn.mobile_cannot_be_empty")
                },
                _rucaptcha: {
                    remote: I18n.t("javascript.onboarding.warn.captcha_invalid"),
                    required: I18n.t("javascript.onboarding.warn.captcha_cannot_be_empty")
                },
                sms_verification_code: {
                    required: I18n.t("javascript.onboarding.warn.captcha_cannot_be_empty")
                }
            }
        }, i = GD.identityValidate(n, l), n.on("input", function(e) {
            var t, n;
            return n = 6 <= (t = $(e.target)).val().length, c(t, n)
        }), n.on("mousedown", function(e) {
            if ($(e.target).is(".switch-signup-type")) return i.resetForm()
        })
    }), $(document).on("turbolinks:load", function() {
        var r, e, t, n;
        if ((r = $("#new_identity.before-check")).length) return n = {
            rules: {
                "identity[email]": {
                    required: !0,
                    gdEmail: !0
                },
                "identity[mobile_no]": {
                    required: !0,
                    gdPhone: !0,
                    normalizer: GD.stripUnwantedCharsInMobileNo
                },
                terms_agreed: {
                    required: !0
                }
            },
            messages: {
                "identity[email]": {
                    required: I18n.t("javascript.onboarding.warn.email_cannot_be_empty"),
                    email: I18n.t("javascript.onboarding.warn.email_format_invalid")
                },
                "identity[mobile_no]": {
                    mobile_no: I18n.t("javascript.onboarding.warn.mobile_format_invalid"),
                    required: I18n.t("javascript.onboarding.warn.mobile_cannot_be_empty")
                }
            }
        }, GD.identityValidate(r, n), r.on("input", "#identity_email", function(e) {
            var t, n, i;
            return i = (t = $(e.target)).val(), n = GD.REGEXP.email.test(i) && $("#terms_agreed").is(":checked") && $(this).val(), c(t, n)
        }), r.on("input", "#identity_mobile_no", function(e) {
            var t, n, i;
            return i = (t = $(e.target)).val(), n = GD.REGEXP.mobile.test(i) && $("#terms_agreed").is(":checked"), c(t, n)
        }), r.on("click", "#terms_agreed", function(e) {
            var t, n, i, o;
            return t = $(e.target), n = $("#signup_type").val(), i = !! (o = r.find(".email-or-mobile-no-field[data-signup-type='" + n + "'] input").val()) && ("mobile_no" === n ? GD.REGEXP.mobile.test(o) : GD.REGEXP.email.test(o)) && t.is(":checked"), c(t, i)
        }), "mobile_no" === $("#signup_type").val() ? (e = $("#identity_mobile_no"), t = GD.REGEXP.mobile.test(e.val()) && e.val()) : (e = $("#identity_email"), t = GD.REGEXP.email.test(e.val()) && e.val()), c(e, t && $("#terms_agreed").is(":checked"))
    }), $(document).on("turbolinks:load", function() {
        var e, t, n, i, o, r;
        if ((e = $("#reset_password.before-check")).length) return n = !! e.hasClass("retrieve-password"), i = {
            rules: {
                "identity[email_or_mobile_no]": {
                    required: !0,
                    gdEmailOrMobileNo: !0,
                    remote: {
                        url: e.data("check-presence-url"),
                        data: {
                            retrieve_password: n,
                            identity: {
                                email_or_mobile_no: $(this).parent().find("#identity_email_or_mobile_no").val()
                            }
                        }
                    }
                }
            },
            messages: {
                "identity[email_or_mobile_no]": {
                    required: n ? I18n.t("javascript.onboarding.forgot_password.warn_account_cannot_be_empty") : u,
                    remote: n ? I18n.t("javascript.onboarding.forgot_password.warn_invalid_email") : I18n.t("javascript.onboarding.warn.account_in_use")
                }
            }
        }, GD.identityValidate(e, i), e.on("input", "#identity_email_or_mobile_no", function(e) {
            var t, n, i;
            return i = (t = $(e.target)).val(), n = GD.REGEXP.email.test(i) || GD.REGEXP.mobile.test(i), c(t, n)
        }), r = (t = e.find("#identity_email_or_mobile_no")).val(), o = (GD.REGEXP.email.test(r) || GD.REGEXP.mobile.test(r)) && t.val(), c(t, o)
    }), $(document).on("turbolinks:load", function() {
        var e, t, n, i;
        if ((e = $("#login_form.before-check")).length) return i = {
            rules: {
                telephone: {
                    required: !0,
                    gdEmailOrMobileNo: !0,
                    gdEmail: !1
                }
            },
            messages: {
                telephone: {
                    required: u
                }
            }
        }, GD.identityValidate(e, i), e.on("input", "#telephone", function(e) {
            var t, n, i;
            return i = (t = $(e.target)).val(), n = GD.REGEXP.email.test(i) || GD.REGEXP.mobile.test(i), c(t, n)
        }), t = $("#telephone"), n = (GD.REGEXP.email.test(t.val()) || GD.REGEXP.mobile.test(t.val())) && t.val(), c(t, n)
    }), $(document).on("turbolinks:load", function() {
        var e, t;
        if ((e = $("#login_form").not(".before-check")).length) return t = {
            rules: {
                telephone: {
                    required: !0,
                    gdEmailOrMobileNo: !0,
                    gdEmail: !1
                },
                password: {
                    required: !0
                }
            },
            messages: {
                telephone: {
                    required: u
                },
                password: d
            }
        }, GD.identityValidate(e, t), e.on("mousedown", function(e) {
            if ($(e.target).attr("href")) return !1
        })
    }), $(document).on("turbolinks:load", function() {
        var e, t;
        if ((e = $("#confirm_reset_password_form")).length) return t = {
            rules: {
                "identity[password]": {
                    required: !0,
                    minlength: 6
                },
                "identity[password_confirmation]": {
                    required: !0,
                    minlength: 6
                }
            },
            messages: {
                "identity[password]": d,
                "identity[password_confirmation]": {
                    required: I18n.t("javascript.onboarding.warn.confirm_password_cannot_be_empty"),
                    minlength: I18n.t("javascript.onboarding.warn.confirm_password_min_length")
                }
            }
        }, GD.identityValidate(e, t)
    })
}.call(this), function() {
    $(document).on("turbolinks:load", function() {
        var i, o, r;
        if ((i = $(".identity-code-verify-form, #reset_password, #verify_sms_code_form, #verify_sms_code_form")).length) return o = function(e) {
            return $(e).addClass("active")
        }, r = function(e, t) {
            var n;
            if (null == e && (e = 0), null == t && (t = !0), n = i.find(".sms-verification .send-verification-sms-code"), GD.countDown(n, e || n.data("remaining-cooling-time") || n.data("cool-time"), I18n.t("javascript.common.resend"), o), !t) return n.parents().find(".validate-invalid").hide()
        }, i.on("click", ".sms-verification .send-verification-sms-code", function(e) {
            var t, n;
            if (!(n = $(e.target)).hasClass("disabled")) return i.find(".helper-error-message-container").hide(), t = n.closest("form").find("#identity_mobile_no"), i.find(".reset-mobile-no").length, $.ajax({
                url: n.data("url"),
                type: "patch",
                data: {
                    identity: {
                        mobile_no: t.val().replace(/\s/g, "")
                    }
                }
            }).done(function(e) {
                return r(e.cooling_time, !1)
            }).fail(function(e) {
                var t;
                return GD.enableBtn(n), r(null != (t = e.responseJSON) ? t.cooling_time : void 0, !1)
            })
        }), i.on("ajax:complete", ".verify-via-voice-code", function() {
            return Turbolinks.visit($(this).data("redirect-url"))
        }), i.find(".sms-verification .send-verification-sms-code").data("remaining-cooling-time") && r(), i.find(".error-message-field").length ? (i.find(".sms-verification").hide(), i.find(".error-message-field").show(), setTimeout(function() {
            return i.find(".error-message-field").fadeOut(500, function() {
                return i.find(".sms-verification").fadeIn(500)
            })
        }, 1e3)) : void 0
    })
}.call(this), function() {
    $(document).on("turbolinks:load", function() {
        var o;
        if ((o = $(".signup-panel")).length) return o.on("click", ".social-account.switch-signup-type", function() {
            return o.find(".social-account.switch-signup-type").removeClass("gd-hide").show(), $(this).hide()
        }), o.on("click", ".switch-signup-type", function() {
            var e, t, n, i;
            return n = "mobile_no" === $(this).data("current-type"), o.find("input").removeClass("has-error"), o.find(".identity-validate-container").empty().hide(), e = o.find(".field[data-signup-type='email']"), t = o.find(".field[data-signup-type='mobile_no']"), e.find("input").val(""), t.find("input").val(""), n ? (e.show().find("input").removeClass("ignore-validate"), t.hide().find("input").addClass("ignore-validate")) : (e.hide().find("input").addClass("ignore-validate"), t.show().find("input").removeClass("ignore-validate")), i = n ? "email" : "mobile_no", o.find("form #signup_type").val(i), o.find("form").find("button:submit").prop("disabled", !0)
        }), GD.fromChina ? void 0 : o.find('.switch-signup-type[data-current-type="mobile_no"]').trigger("click")
    })
}.call(this), function() {
    $(document).on("turbolinks:load", function() {
        var a, s, o, l;
        if ((a = $(".identity-code-verify-form, #reset_password, #verify_sms_code_form")).length) return l = function(e, t) {
            return t = parseInt(t.toString().split("")[0]), e.val(t)
        }, o = function(e) {
            var t;
            return t = _.max([e - 1, 0]), s.find("input[data-index=" + t + "]")
        }, (s = a.find(".verification-code-container")).find("input").first().focus(), s.on("input", "input", function() {
            return $(this).data("prev-data", $(this).val())
        }), s.on("keydown", "input", function(e) {
            var t, n, i;
            if (8 === e.keyCode && !$(e.target).data("prev-data")) return n = parseInt($(this).data("index")), $(this).val(""), i = (t = o(n)).val(), t.val(i).focus()
        }), s.on("keyup", "input", function(e) {
            var t, n, i, o, r;
            if (o = (i = $(e.target).val()).trim().length) return 1 < o && l($(this), i), 5 === (n = $(e.target).data("index")) ? (r = _.reduce(s.find("input"), function(e, t) {
                return e += $(t).val()
            }, ""), a.find("#input_sms_code_verify").val(r), a.submit()) : (t = n + 1, s.find("input[data-index=" + t + "]").focus())
        }), window.addEventListener("paste", function(e) {
            var t;
            if (!($(e.target).closest(".verification-code-container").length <= 0)) return t = (e.clipboardData || window.clipboardData).getData("text"), _.each(t, function(e, t) {
                return s.find("input[data-index=" + t + "]").val(e)
            }), s.find("input[data-index=5]").trigger("keyup")
        }, !1)
    })
}.call(this), function() {
    $(document).on("turbolinks:load", function() {
        var e, t, n, i, o, r, a, s;
        for (r = 0, a = (s = $(".password-reset-page, .signup-verify-page").find(".auto-redirect")).length; r < a; r++) i = s[r], e = $(i), GD.countDownRedirect(e, e.attr("href"), 10, e.text());
        if ($(".verify-panel form input:submit").on("click", function() {
                return GD.countDown($(this), 60, $(this).val()), $(this).closest("form").submit()
            }), 0 !== $(".login-box").length) return t = $("#primary_captcha_container"), (n = t.closest("form")).find(".identity-validate-container"), o = GD.isMobile ? 5 : 6, n.on("change", "#identity_mobile_no", function() {
            if ($(".visualCaptcha-action-area.success").length && n.valid()) return n.submit()
        }), GD.visualCaptcha(t, o, I18n.locale, function(e) {
            return e.result && n.valid() ? n.submit() : e.result ? void 0 : GD.shakeElement($(".login-page .center-container, .password-reset-page .center-container"))
        }), $(".login-box").on("click", ".invitation:not(.account-weixin-mini)", function() {
            return $(".login-box").find("form .identity-validate-container").empty().hide(), $(".login-box").find("form :input:not([type=hidden])").val(""), $(".login-box .alert").hide(), $("#weixin_login_section").hide(), $(".login-box").find(".login-panel, .signup-panel").hide(), $("." + $(this).data("for")).stop().fadeIn(), $(".login-box .login-switcher").toggle(), $(".login-box").find(".has-error").removeClass("has-error")
        }), $(".login-box").on("click", ".social-login [data-role=toggle_social_login]", function() {
            if ($(".social-login [data-role=toggle_social_login]").hide(), $(".social-login [data-role=toggle_social_login]").closest(".social-login-wrapper").css({
                    width: "100%"
                }), $(".login-box .social-login-container").slideDown("fast"), 0 < $(".site.phone-device").length) return $(".login-box .social-login").removeClass("absolute-bottom"), $("html, body").animate({
                scrollTop: $(window).height()
            }, "slow")
        }), $(".login-box").on("click", ".login-switcher a", function() {
            return $(".login-box").find(".has-error").removeClass("has-error"), $(".login-box").find("form").validate().resetForm()
        })
    })
}.call(this), function() {}.call(this);